oidc調査

OIDC(OpenID Connect) は「IDトークンを発行する仕組み」

具体性の高い説明の記事で勉強

https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06 external_link

とりあえず ID トークンは認証時に発行される何かしらの識別用文字列。SAMLでゆうアサーションに当たるのかな

JSONデータを用いた情報伝達方法が、フォーマットによって何種類かあるらしい、この記事で解説してるのは

  • JWS (JSON Web Signature)
  • JWE (JSON Web Encryption)
  • JWK (JSON Web Key)
  • JWT (JSON Web Token)

ID トークンはその中の JWT(JWTを説明するにはJWS, JWE, JWK を理解しておくと早いのでそれらも解説している)

ID トークンの構成

ヘッダー.ペイロード.署名

RFC 7515 (JSON Web Signature (JWS)) の「7.1. JWS Compact Serialization」で定義されている「JSON Web Signature (JWS) の Compact Serialization 形式」

らしい

JWS

具体的なフォーマット

BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)

それぞれbase64でエンコードされている。記事ではデコードしてみて、どのような情報が含まれているのか紹介してくれている

署名に関してはバイナリデータが得られる。これはヘッダーペイロードに対する署名、記事内の例ではそのアルゴリズムがRS256であり、そのことはヘッダーに記載してある。

JWE

...

まあとにかく

OIDCはこの ID トークンを発行して認証を行う方式

認証フローの図解

検索したらトップに来るので貼るまでもないが

https://qiita.com/TakahikoKawasaki/items/4ee9b55db9f7ef352b47 external_link

https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe external_link

↑題名の通り一番分かりやすい。この名刺の例ならIssuer Hostが直感的にわかる(まだあってるかどうか確認できてないけど)

ただ構成としては

[認証クリアして利用したいアプリ]

[アプリの認証画面] ー [OpenID プロバイダー]

|

[ユーザー]

の方が分かりやすいんじゃないか。利用したいアプリをGROWIだとすると、アプリの認証画面はGROWIのログイン画面で、OpenIDプロバイダーとユーザーとのやりとりはプロバイダの画面が出て来るところなのでは

GROWI における OIDC 設定

  • ホスト、アカウントの情報
    • Provider Name
      • プロバイダ名
    • Issuer Host
      • ホスト名
    • Client ID
    • Client Secret
  • 各種操作のエンドポイント
    • Authorization Endpoint
    • Token Endpoint
    • Revocation Endpoint
    • Introspection Endpoint
    • UserInfo Endpoint
    • EndSessioin Endpoint
    • Registration Endpoint
    • JSON Web Key Set URL
  • Attr Map(ユーザーの各種情報の紐付け)

発表に向けて

概要(認証のイメージ)に関して

細かい点を抜かせばSAMLと同じように認証の流れを説明すれば良さそうなので、SAMLと一緒に説明しつつ、違う部分だけ軽く補足すれば良さそう

ハンズオン

Auth0 を使ったハンズオンならできそう