Connect)の違いについて、それぞれで登場する概念やIDトークンとアクセストークンなどの説明を交えながらまとめました。OAuthとOIDCの違いは??OAuthは認可、OIDCは認証のためのプロトコルです。Flowと表記)がベースになってその拡張なので、まずは認可コードフローの登場人物と具体的なフローについて理解することが重要だと考えています。必要であればご覧ください。僕はAuthleteの川崎さんの記事でOAuthの認可コードフローを勉強しました。登場する概念に対する呼び名が異なります。(僕はこの辺りかなりこんがらがってました)MEMOOAuthのクライアントについて補足クライアントには大きく2つあります。【コンフィデンシャルクライアント】シークレットキーを機密に扱えるクライアント(サーバーサイドで動くアプリがクライアントになるケース)【パブリッククライアント】シークレットキーを機密に扱えないクライアント(SPAのフロントエンドがクライアントになるケース)認可サーバとしてkeycloakを利用する際は、クライアントの設定で、この辺り使い分けが必要です。IDトークンとアクセストークンOAuthの認可コードフローでは認可サーバからアクセストークンを発行してもらいます。OIDCはOIDCフローでOPからIDトークン+アクセストークンが発行されます。OIDCは認可コードフローとほぼ同じフローでアクセストークンも発行するので認可に利用することもでき、これで認証と認可OAuth、OIDCがこんがらがるんですよね。認可サーバが発行するトークンは、JWTに改竄されても検知できるようにシグネチャを付与したJWS形式にすることがあります。JWTには複数のクレーム入っており、ユーザに独自の属性を持たせる(例えばユーザの所属先情報とか)場合、keycloakではマッパーという機能を使えばクレームを追加できます。JWSを解読できるjwt.ioというサイトのがあり、それを使ってとあるトークンを解読できるようにしたのがこんな感じです。アクセストークンIDトークンクレームは紫のところで、ここにorganization_typeという所属先情報を追加したIDトークンにしたり、さらに言うと、SSOで初回ログイン時にシステム固有のユーザ項目などはここに追加しておいて、そこから値を取り出して初回登録する。次はこのやり方で実装してみようと個人的に考えています。トークンとリフレッシュトークンIDトークンやアクセストークンと同時に、リフレッシュトークンがKeycloakからは発行されます。簡単に言うと、何度も認証なり認可の作業をユーザにさせないことです。トークンの有効期限が切れても、リフレッシュトークンで新しいトークンを自動で発行できるイメージ。keycloakの本では、トークンの有効期限は数分〜数十分、リフレッシュトークンの有効期限は数時間から数日を推奨されていました。しておくと、トークンが盗まれても、数分くらいしか使えないようになります。以前、SPAにおけるアクセストークンやリフレッシュトークンの扱いは何がベストプラクティスなんだろう。悩んでた時期があり、OAuth2.0のブラウザベースアプリ(SPA)のベストプラクティスに近いこれを参考にいろいろ考察していたのですが以下のサイトにたどり着きました。draft-ietf-oauth-browser-based-apps-08ここには、ざっくり言うとリフレッシュトークンは使用する度にローテーションしなければならない。ローテーションの際、元のリフレッシュトークンの有効期限を伸ばしてはいけない。(有効期限をそのまま引き継いでローテーションしなさい)と述べられていました。KeycloakでもTokenの設定でこの辺りできるので、SPAでフロントエンドにトークンを返却しなければならない場合は最低限この設定しておくべきかなと思います。まとめ今回はOAuthとOIDCの違いについてまとめました。この辺りは押さえておきましょう。Bootで作成したRestAPIを保護、SPAにKeycloakのSSO機能でログイン機能を付与、などなど認証認可周りをまとめた記事を作りました。こちらもご覧ください。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。