OIDC

概要

OpenID Connect Core 1.0 (http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html external_link) より引用

OpenID Connect 1.0 は, OAuth 2.0 プロトコルの上にシンプルなアイデンティティレイヤーを付与したものである. このプロトコルは Client が Authorization Server の認証結果に基づいて End-User のアイデンティティを検証可能にする. また同時に End-User の必要最低限のプロフィール情報を, 相互運用可能かつ RESTful な形で取得することも可能にする.

図でイメージしやすい記事 → https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe external_link

GROWI で使ってみよう

ory/hydre (https://github.com/ory/hydra external_link) を利用。とりあえずクイックスタート (https://github.com/ory/hydra#quickstart external_link) に従って進める。

事前準備

  • git
  • Docker
  • docker-compose

clone

$ git clone https://github.com/ory/hydra.git

build

$ cd ./hydra $ docker-compose -f quickstart.yml \ -f quickstart-postgres.yml \ up --build

client の追加

新たにターミナルを開き以下を実行

$ docker-compose -f quickstart.yml exec hydra \ hydra clients create \ --endpoint http://127.0.0.1:4445/ \ --id my-client \ --secret secret \ -g client_credentials

クライアント資格情報の付与

$ docker-compose -f quickstart.yml exec hydra \ hydra token client \ --endpoint http://127.0.0.1:4444/ \ --client-id my-client \ --client-secret secret [トークンが表示される]

トークンのイントロスペクションを実行

$ docker-compose -f quickstart.yml exec hydra \ hydra token introspect \ --endpoint http://127.0.0.1:4445/ \ --client-id my-client \ --client-secret secret \ > 上記で作成したトークンを入力 // res { "active": true, "aud": null, "client_id": "my-client", "exp": 1582610547, "iat": 1582606947, "iss": "http://127.0.0.1:4444/", "sub": "my-client", "token_type": "access_token" }

OAuth 2.0 Authorization Code Grantを実行

その許可を実行できるクライアントを作成

$ docker-compose -f quickstart.yml exec hydra \ hydra clients create \ --endpoint http://127.0.0.1:4445 \ --id auth-code-client \ --secret secret \ --grant-types authorization_code,refresh_token \ --response-types code,id_token \ --scope openid,offline \ --callbacks http://localhost:3000/passport/oidc/callback //growiのセキュリティ画面に表示されるコールバックURL

Auth0 を使ってみる

OpenID Connect 設定

keyvalue
Provider Name各自のアプリケーション名
Issuer Host各自のアプリケーションのドメイン
クライアントID各自のID
クライアントシークレット各自のシークレット

Attribute Mapping 設定

keyvalue
Identifiersub
ユーザー名name
名前nickname
メールアドレスemail
  • 新規ログイン時、username が一致したローカルアカウントが存在した場合は自動的に紐付ける
  • 新規ログイン時、email が一致したローカルアカウントが存在した場合は自動的に紐付ける

どちらも ON にする。 スクリーンショット 2020-02-26 11.40.43.png

done