[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Jenkins に Google のアカウントでログインできるプラグインが便利だったので Slack でやれないかなーって思って調べてみる。
なお、そういうプラグインはさっとググってみたところなかった。しょんぼり。
おそらく以下が出来ればできそう。
Slack API: Applications | Slack からアプリを登録する。アプリを作る際はワークスペース一つとアプリの名前を登録する必要がある。ワークスペースを持っていなければ適当に調達しよう。ここを読んでいる時点でない、ということはないと思うが……
3つの値をメモする。
アプリを作ったら Slack API: Applications | Slack 等から先に作ったアプリを開く。
まず、Client ID と Client 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
等である。これは他の人にはあまり見せないこと。この例もスタイルを似せつつ適当こいてる。
先の Tokens for Your Workspace の下にある Redirect URLs の Add New Redirect URL をクリックし適当な URL を入れる。実際には OAuth をつかって認証した直後にジャンプしてほしいページの URL を入れる。追加したら直下の Save URLs をクリックする。
以下の形式になる
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 のログイン画面が出てくるので、ログインするとリダイレクト先のページにジャンプできるはずだ。
リダイレクト先のページにジャンプした際、 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
社内の Jenkins にユーザを追加するのが面倒になってきたので、Google Login Plugin (Jenkins Wiki / GitHub) というプラグインを Jenkins に入れてみようという話になりためしてみた。
導入手順はこの記事を書いている時点では GitHub 記載の通りでよい。
導入後、Jenkins の設定から「グローバルセキュリティの設定」をクリック、得られたメニューの「ユーザー情報」から選択すれば使える。設定の際、Google Apps Domain
は特に何も設定しなくても動くようだ。
設定した状態でログインを試みると Jenkins のユーザ名・パスワードを入力する画面ではなく Google のログイン画面に飛ばされる。これで Google にログインすればそのまま Jenkins にログインできる。特に Jenkins 側にユーザの登録をする必要はない (権限の設定は別途必要)。
また、 Google の OAuth 設定で Google アカウントを特定組織に含まれるもののみ、とかにしておけば社用のアドレスでのみログインを認めることもできる。弊社はそういうことをしていたので便利便利。
Slack でログインできたらありがたかったりするけどにゃー
(雛´-`).。oO( #SW25 の #ヴァイスシティ のマップ管理ツールに続いてイベントシート類の管理ツールを作りました。
— しゅんしゅんひよこ (@Shunshun94) May 4, 2019
カレンダーやミッション、イベントの状態を管理できます。画面上部の URL発行 をクリックした際に表示される URL を共有すればそれらを共有できます)https://t.co/1urvFdYYoB
例によって URL にデータを持つ形式。
ほぼほぼタイトルだけで完結した記事なのだが…… https://shunshun94.github.io/shared/jquery/io/github/shunshun94/trpg/scenarioTools/viceCity.html においてある。例によって URL で情報を管理しているので共有も簡単。
(雛´-`).。oO( #SW25 のヴァイスシティ向けマップ管理ツールを作りました。URLを共有するだけで現在位置・パラグラフが記入されたマップを他プレイヤーと共有できます)https://t.co/1Amq0OyC7Z
— しゅんしゅんひよこ (@Shunshun94) April 29, 2019
Discord の OAuth2 を使ってみようと思ったのでメモ。公式ドキュメント
Discord の DEVELOP PORTAL から Discord アプリケーションを作り、CLIENT ID と CLIENT SECRET を控える。
OAuth2用の転送 URL を DEVELOP PORTAL を利用して作成する。
まず、先に作ったアプリケーションをDiscord の DEVELOP PORTAL より開き、OAuth2 を画面サブのメニューから選択。
REDIRECTS の入力欄に URL を記入する。
然る後に画面下部の OAUTH2 URL GENERATOR を使い、URL を作成する。SELECT REDIRECT URL から先に作った URL を選択したうえでその下の SCOPES を編集する。何を選んだらどうなるのかは OAuth2 Scopes 参照。
適当に SCOPES を設定したらその下に URL と Copy と書かれたボタンが並んでいるので Copy をクリックして転送 URL を取得する。この URL を控えておくこと。
先に取得した転送 URL にアクセスする。Discord へのログインを要求されるのでログインする (すでにログインしていたらされないかもしれない)。なんか尋ねられるので確認し、下部の認証をクリックする。OAuth2 用の URL を指定した時の URL に飛ばされるが、URL 末尾に ?code=XXXXX
(XXXXX はランダムな文字列) とある。この XXXXX が「code」なのでこれを控える。これはアクセス token 取得の度に生成する必要がある。
discord サーバに対して post を送って取得する。ここでは curl してみる。
curl -X POST -H "Content-Type:application/x-www-form-urlencoded" \ -d "redirect_uri=${REDIRECTS の URL を JS の encodeURIComponent で encode したもの}&\ scope=${SCOPES の各項目を + で繋いだもの}&\ client_id=${先に控えた CLIENT ID}&\ client_secret=${先に控えた CLIENT SECRET}&\ grant_type=authorization_code&\ code=${先に控えた code}" \ https://discordapp.com/api/oauth2/token
妥当に実行できると以下のような返答が得られる。
{ "access_token": "ランダムな文字列", "scope": "SCOPES の各項目を半角スペースで繋いだもの", "token_type": "Bearer", "expires_in": 604800, "refresh_token": "ランダムな文字列" }
とりあえず自分が誰なのか取得してみる。
curl -H "Authorization: Bearer ${先に取得した access_token}" \ https://discordapp.com/api/users/@me
作ったアプリを特定のサーバにいる人だけに利用させたい場合なんかに使えそう
curl -H "Authorization: Bearer ${先に取得した access_token}" \ https://discordapp.com/api/users/@me/guilds
DEVELOPER PORTAL の RESOURCES 以下にいろいろ書いてある。
認可のための機能なのでこれで得た token でメッセージの投稿とかはできない。