tosite/nicocale.php

Slackの管理者アカウント以外でSlack連携しようとすると権限エラーが出る問題を調査する

Closed this issue · 10 comments

image

問題の権限 正常な権限
image image

image

こっちのボタンからでなんとかならんだろうか。
一旦権限全削除してやってみる。

image

image

だめっぽい。

試しにアクセス権絞って同じ状態を作り出してみた。

手順

  1. インストール権限剥奪
  2. アプリ削除
  3. 管理者でアプリインストール
  4. 一般ユーザーでログイン
  5. 連携申請→ダメでした
  6. 管理者でログイン
  7. 管理者で連携申請→OKでした
  8. 一般ユーザーで再度連携申請→ダメでした

アプリ消去してAdd to Slackした状態。
スクリーンショット 2019-06-09 0 39 02

一般ユーザーでログインした後。
スクリーンショット 2019-06-09 0 41 00

appが自身のサービスのログインにslackを使っている場合、初期のOAuthリクエストのスコープはidentifyに限り、正常にログインした後、files:readの権限等を付与したい場合もある。そういった時にmultiple authorizationは役に立つ

https://qiita.com/abcb2/items/64a89f4506d1ce27692f#handling-multiple-authorizations

これっぽい?

Handling Multiple Authorizations

Your application may send a user through the OAuth flow multiple times.

You can utilize this behavior to re-verify a user's identity or to retrieve a user's access token again as needed. You can also use it to upgrade an access token's OAuth scopes.

If your application requires a basic set of permissions to function, but can utilize optional permissions for advanced functionality, requesting additional scopes separately ensures that your application will have the access it needs to function without initially deterring users from approving it.

When your user is ready to indulge themselves in features requiring additional permissions, send them through the OAuth flow again, this time requesting the additional scopes you need.

For example, if your app uses Slack to sign in to your service, you may want to restrict your initial OAuth request to just the identify scope. If that same app also has an optional feature to import files from Slack using files:read, you can initiate the application approval process again, within context of the user's action, so they understand why the additional permissions are being requested.

This ensures that your app retains critical functionality (signing in to your app) without requiring optional permissions (access to the user's files) and also provides better context for the user.

https://api.slack.com/docs/oauth#multiple

(ガバ翻)
複数の承認を処理する
あなたのアプリケーションはOAuthフローを通して複数回ユーザーを送るかもしれません。

この動作を利用して、ユーザーの身元を再確認したり、必要に応じてユーザーのアクセストークンを再度取得したりできます。アクセストークンのOAuthスコープをアップグレードするためにそれを使うこともできます。

アプリケーションが機能するために基本的な権限のセットを必要としているが、高度な機能に対してオプションの権限を利用できる場合は、追加のスコープを個別に要求することで、ユーザーが最初に承認することを妨げずに機能します。

ユーザーが追加の権限を必要とする機能に夢中になる準備ができたら、再度OAuthフローを介してそれらを送信し、今度は必要な追加のスコープを要求します。

たとえば、アプリがSlackを使用してサービスにサインインする場合は、最初のOAuthリクエストをidentify範囲内だけに制限することをお勧めします。その同じアプリにSlackを使ってファイルをインポートするオプション機能もある場合files:readは、ユーザーの操作のコンテキスト内でアプリケーション承認プロセスを再度開始できるので、追加の権限が要求されている理由を理解できます。

これにより、オプションの権限(ユーザーのファイルへのアクセス)を必要とせずに、アプリが重要な機能(アプリへのサインイン)を保持し、ユーザーにとってよりよいコンテキストを提供することが保証されます。

image

ここの画面がどうなってるか、週明けに聞くかなー。
うーんわからん。なんでだー。

もしかして一人ひとり Add to Slack から申請出す必要がある系・・・?
image

Add to Slack でリクエストしているもの

https://slack.com/oauth/authorize
?client_id=CLIENT_ID
&scope=users.profile:write,channels:read,chat:write:bot
&redirect_uri=REDIRECT_URL

ログイン時に要求しているもの

'identity.basic'
'identity.team'
'identity.avatar'
'identity.email'

ログイン後に要求しているもの

'channels:read'
'chat:write:bot'
'users.profile:write'

https://github.com/tosite0345/nicocale.php/compare/slack-auth?expand=1 試しに色々やってみた結果。
トークン取得→権限申請までを1ページでやろうとしてみた。

image
この状態で一般ユーザーが入ろうとすると…。

image

(゜レ゜)
事前に管理者でAdd to Slack、ログインまでは済ませている。

image

キター!
申請し直したら権限増えたよやったねたえちゃん

ログイン後の連携画面で一度インストールを申請→承認してもらったらできるようになったので解決とします。