Slackの管理者アカウント以外でSlack連携しようとすると権限エラーが出る問題を調査する
Closed this issue · 10 comments
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は、ユーザーの操作のコンテキスト内でアプリケーション承認プロセスを再度開始できるので、追加の権限が要求されている理由を理解できます。
これにより、オプションの権限(ユーザーのファイルへのアクセス)を必要とせずに、アプリが重要な機能(アプリへのサインイン)を保持し、ユーザーにとってよりよいコンテキストを提供することが保証されます。
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ページでやろうとしてみた。
(゜レ゜)
事前に管理者でAdd to Slack、ログインまでは済ませている。
ログイン後の連携画面で一度インストールを申請→承認してもらったらできるようになったので解決とします。