忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/05    04« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  »06

Slack の OAuth を試す試す

Discord でやったときの話

Jenkins に Google のアカウントでログインできるプラグインが便利だったので Slack でやれないかなーって思って調べてみる。

なお、そういうプラグインはさっとググってみたところなかった。しょんぼり。

おそらく以下が出来ればできそう。

  1. Slack の OAuth が使える
  2. Jenkins のプラグインでログイン周りの設定をいじれる
  3. 1, 2 を合体

とりあえず公式

Using OAuth 2.0 | Slack

アプリを登録する

Slack API: Applications | Slack からアプリを登録する。アプリを作る際はワークスペース一つとアプリの名前を登録する必要がある。ワークスペースを持っていなければ適当に調達しよう。ここを読んでいる時点でない、ということはないと思うが……

Client ID, Client Secret と OAuth token を取得する

3つの値をメモする。

アプリを作ったら Slack API: Applications | Slack 等から先に作ったアプリを開く。

まず、Client IDClient Secret を取得する。アプリを開いてちょっと下にある App Credentials の Client ID と Client Secret の内容をメモする。前sぢゃは012345678901.012345678901 とかそんな感じの . に区切られた数字の羅列であるはず。後者はローマ字の小文字と数字の混じった文字列のはず。Show ボタンをクリックすれば読めるようになる。

さらに App Credentials の上にある Add features and functionality から Permissions を開く。

開くと Install App to Workspace なる緑色のボタンがあるので叩く。なんか尋ねられるので Authorize をクリックし承認する。意味が不安なら頑張って読んでください。

承認すると OAuth & Permissions の画面に戻るので OAuth Access Token をメモる。OAuth Access Token は xoxp で始まる文字列のはず。t例えば xoxp-123456789012-123456789012-123456789012-4268abcdef12abcde12a12a1abc123a0 等である。これは他の人にはあまり見せないこと。この例もスタイルを似せつつ適当こいてる。

Redirect URLs を登録する

先の Tokens for Your Workspace の下にある Redirect URLs の Add New Redirect URL をクリックし適当な URL を入れる。実際には OAuth をつかって認証した直後にジャンプしてほしいページの URL を入れる。追加したら直下の Save URLs をクリックする。

OAuth 用ログイン URL を作る

以下の形式になる
https://slack.com/oauth/authorize?client_id=${Client ID}&scope=${付与される権限}&redirect_uri=${リダイレクト先の URL}

パラメータ名
client_id 先に取得した Client ID 012345678901.012345678901
scope OAuth Permission scopes | Slack 記載の認可する内容を
スペースで繋げたものを JS の encodeURIComponent で encode したもの
channels%3Ahistory%20users%3Aread
redirect_uri Redirect URLs に登録した URL のいずれかを
JS の encodeURIComponent で encode したもの
http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F
state アクセスが意図したものであることを確認するための記号。
Slack アカウントでログインする先のアプリが発行する文字列
rndString_k2SgIOUn
team どのワークスペースを使ってログインするのかを指定する。
これがないとユーザはどのワークスペースを使うのか判断した上でログインしないといけなくて面倒。
自明なら不要かもしれない。
https://my_example_workspace_1549.slack.com/ なら my_example_workspace_1549
my_example_workspace_1549

例をそのまま使うと次のような感じになる。
https://slack.com/oauth/authorize?client_id=012345678901.012345678901&scope=channels%3Ahistory%20users%3Aread&redirect_uri=http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F&team=my_example_workspace_1549&state=rndString_k2SgIOUn
アクセスしてみると Slack のログイン画面が出てくるので、ログインするとリダイレクト先のページにジャンプできるはずだ。

code をメモする

リダイレクト先のページにジャンプした際、 URL に code=xxx.. という記載があるはずなのでこれをメモする。 &state=... もあると思うがこちらは検証用に使うものなので使うなら使えばいいし、捨てるなら捨てるでよい。

アクセストークンを取得する

以下では curl を使う。curl でできるなら大体のプログラミング言語でやれるだろう。

curl -X POST -H "Content-Type:application/x-www-form-urlencoded" \
-d "redirect_uri=${リダイレクト先の URL}&\
client_id=${Client ID}&\
client_secret=${Client Secret}&\
code=${code}" \
https://slack.com/api/oauth.access
パラメータ名
client_id OAuth 用ログイン URL で使ったのと同じ値 012345678901.012345678901
client_secret 先に取得した Client Secret 5yhxduxxevewqu79h3bsw7z2z1hmkavy
redirect_uri OAuth 用ログイン URL で使ったのと同じ値 http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F
code 先にメモした code 012345678901.012345678901.81pysiz1sekdpze75hsrrqh3oyfdbqfmaqjtusko9emur4zh12ydorx3rrovyjxz

上手くいくと以下のような返答が返ってくる。この access_token をメモること。

{
  "ok": true,
  "access_token": "xoxp-012345678901-012345678901-012345678901-fsrieoikdsdymo1e8wv8fydoupkyikox",
  "scope": "identify,bot,channels:history,channels:read,users:read,chat:write:user",
  "user_id": "JO88AWYL3",
  "team_name": "私のSlack",
  "team_id": "ZI1F3NKB6"
}

実際に使ってみる

割と色々やれる。

ユーザの一覧を取得する

curl -X GET -H "Authorization: Bearer ${先に取得した access_token}" \
https://slack.com/api/users.list

発言する

curl -X POST -H "Content-type: application/json" \
-H "Authorization: Bearer ${先に取得した access_token}" \
-d "{\"channel\":\"random\", \"text\": \"にゃーん\"}" \
https://slack.com/api/chat.postMessage
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R