- 追加された行はこの色です。
- 削除された行はこの色です。
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>OAuth PKCE]]
* 目次 [#d22d27a9]
#contents
*概要 [#v6a8d036]
[[Implicit非推奨>UserAgentでOAuth2のTokenを取得するベスト・プラクティス#g8b68319]]に伴い、[[SPA>Single-page application]]で[[PKCE>OAuth PKCE]]する場合のプロファイル。
*詳細 [#n4168d13]
**特徴 [#x41303e1]
-カスタムURLスキームを使用しない「response_mode=fragment」で認可リクエストを行う。
-カスタムURLスキームを使用しない~
「response_mode=fragment」で認可リクエストを行う。
-バックエンドからclient_secret付きでTokenリクエストにするものと思っていたが、
-従って、基本的には、ネイティブでやってた[[PKCE>OAuth PKCE]]を、~
「response_mode=fragment」で、まんま[[SPA>Single-page application]]で実装すれば良い。
--[[以下>#jf4fadcd]]を確認すると、client_secretは不要らしい([[SPA>Single-page application]]上からTokenリクエスト可能)。
※ IdPが「response_mode=fragment」に対応している必要がある。
--一方で、[[Hybrid Flow>OpenID Connect#l565139a]]のcodeは
バックエンドからclient_secret付きでTokenリクエスト(code_verifier無いから)。
**実装 [#gd7ca851]
従って、基本的には、ネイティブでやってた[[PKCE>OAuth PKCE]]を、まんま[[SPA>Single-page application]]で実装すれば良い。
***認証 [#jad079a9]
-前述の[[特徴>#x41303e1]]の通り、client_secretは不要。
-[[PKCE>OAuth PKCE]]なので、[[SPA>Single-page application]]からのTokenリクエストでも、client_secretは不要。
-JavaScriptから基本認証の付加は難しいので、~
AuthZ(N)側が [[client_secret_post>OpenID Connect - クライアント認証#b718e26d]] をサポートしていると吉。~
(そもそも、client_secret無しの基本認証ってのもアレ)
***フロー [#o3d5f3a3]
基本的に、ネイティブ・アプリケーションと同様に、~
フロントエンド・ホスト側のエンドポインドは利用しなくていい。
-認可リクエストはフロントエンド・ホストからリダイレクトで開始するのだと考えていた。
-認可リクエストはフロントエンド・ホストからリダイレクトで開始するのだと考えていたが、
--しかし、Routerを定義したSPAでは、自サイトにHTTPリクエストが飛ばず、
--ネイティブ・アプリケーションと同様に、Public Clientから直接リクエストした。
-リダイレクト・エンドポイントを経由してCodeを受け取るのだと考えていたが、
--しかし、Routerを定義したSPAでは、自サイトにHTTPリクエストが飛ばず、
--カスタムURLスキームと同様、直接、Public Clientに戻ってCodeを取得する。
※ Router(URLによるページ遷移)を定義した[[SPA>Single-page application]]では、~
自サイトにHTTPリクエストが飛ばなくなる。と言うのがポイント。
**余談 [#n6ad6d9c]
バックエンドからclient_secret付きでTokenリクエストにするものと思っていたが、
-[[以下>#jf4fadcd]]を確認すると、client_secretは不要らしい([[SPA>Single-page application]]上からTokenリクエスト可能)。
-一方で、[[Hybrid Flow>OpenID Connect#l565139a]]のcodeは~
バックエンドからclient_secret付きでTokenリクエスト(code_verifier無いから)。
*参考 [#jf4fadcd]
-Okta Developer~
--Implement the OAuth 2.0 Authorization Code with PKCE Flow~
**Okta Developer [#rf705fb6]
-Implement the OAuth 2.0 Authorization Code with PKCE Flow~
https://developer.okta.com/blog/2019/08/22/okta-authjs-pkce
---Replace Implicit Flow with PKCE~
--Replace Implicit Flow with PKCE~
https://developer.okta.com/blog/2019/08/22/okta-authjs-pkce#replace-implicit-flow-with-pkce
**Auth0 [#ocd39e9c]
-Authorization Code Flow with Proof Key for Code Exchange (PKCE)~
https://auth0.com/docs/flows/concepts/auth-code-pkce
-Execute an Authorization Code Grant Flow with PKCE~
https://auth0.com/docs/api-auth/tutorials/authorization-code-grant-pkce
**OSSコンソーシアム [#bf713854]
***開発基盤部会 Blog [#wdf47692]
-PKCE 4 SPA(Authorization Code Grant Flow with PKCE)実装ノウハウ~
https://www.osscons.jp/joar0xbhj-537/
----
Tags: [[:IT国際標準]], [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]