「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>OAuthによる外部ログイン(認証)の研究]] * 目次 [#n69bb58b] #contents *概要 [#fe00a351] -[[JWT]]を使う[[OAuth]] 2.0についての纏め。 -[[OAuth]] 2.0のセキュリティ上の解題を解決し認証での利用を可能にする。 *Bearer Tokenに[[JWT]]アサーションを使用 [#y9c24d21] -[[OAuth]] 2.0ではAccess Tokenまで仕様化されていないので[[JWT]]アサーションを利用可能。 -Access Tokenとして、[[JWT]]アサーションを使用すれば、~ 改竄、置換、CSRF(XSRF)などを検出できるようになるため、~ Implicitグラント種別でもより安全に利用できるようになる。 -これは、[[OAuth]] 2.0の仕様には無いので[[OpenID Connect]]の仕様を参考に独自に実装する必要がある。 -[[OpenID Connect]]の[[IDトークンに同梱されるクレーム>OpenID Connect#ofb73c59]]を~ 同梱させれば、ほぼ安全になり、認証用途にも利用できるようになる。 --ClientやResource Serverでtokenの署名検証が可能になる。 --また、発行者のAuthZ Server(iss:issuer)と~ 発行対象のClient(aud:audience=[[クライアント識別子>#i7b73962]])を特定できる。 --これにより、トークン置き換え攻撃も防ぐことができる。 -ポイントは、このAccess Tokenは、[[ASP.NET Identity]]などの~ 特定テクノロジに準拠したのResource Serverでなくても利用可能であるという点。 **[[ASP.NET Identity]] [#k0b22c52] -Access Tokenのカスタマイズが可能。 -ただし、(基本的には)Access Tokenのみがカスタマイズの対象なので、~ [[OpenID Connect]]に対応させることはできない([[IDトークン>OpenID Connect#ofb73c59]]の追加はできない)。 -参考 --JSON Web Token in ASP.NET Web API 2 using Owin - Bit of Technology~ http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ **[[Azure Active Directory>Microsoft Azure Active Directory]] [#de766162] [[この方式は、AzureADのOAuthでも利用されている模様。>Microsoft Azure Active Directory#a58c67e4]] **参考 [#ie28f470] -OAuth 2.0のAccess TokenへのJSON Web Token(JSON Web Signature)の適用 - r-weblife~ http://d.hatena.ne.jp/ritou/20140927/1411811648 -モバイルアプリのユーザ認証方法についてまとめてみた - Qiita~ http://qiita.com/ledmonster/items/0ee1e757af231aa927b1 --10 Things You Should Know about Tokens~ 9. JSON Web Tokens can be used in OAuth: Bearer Token~ https://auth0.com/blog/ten-things-you-should-know-about-tokens-and-cookies/#token-oauth *JWT Bearer Token Flow [#f5007063] **概要 [#c700ab65] -[[GoogleやMicrosoft、SalesforceなどのWebAPI認証の方式として採用されているもよう>WebAPIの認証#p99216b3]]。 -事前に信頼関係を構築できるシステムからAPI接続する場合に有効な方法らしい。 **具体的なフロー [#s17db5fe] -[[JWT]]作成のための証明書を生成 or 取得する。 -証明書をClient側(秘密鍵)とResource Server側(公開鍵)に登録する。 -Clientで[[JWT]]を署名作成し、Resource Serverに送信して、 -Resource Serverで[[JWT]]を検証し、Access Token(Bearer Token)を取得する。 -Clientから、Access Token(Bearer Token)を使用してResource Serverにアクセスする。 **参考 [#uea38a81] -RFC 7523 - JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants~ https://tools.ietf.org/html/rfc7523 *OAuth2.0 Proof of Possession [#u8ebfddc] **概要 [#u06d5989] -Access Tokenを[[JWT]]アサーションで発行する系のドラフト。 -誰が(どの認可サーバが)誰に(どのクライアントに対して)発行した Access Token なのかを確認する。 -これにより、意図しないクライアントからのリソースに対するリクエストを拒否するするこができる。 -基本的にはJWTの検証という話であるが、[[OAuth]] 2.0に近い、~ [[OpenID Connect]]の[[IDトークン>OpenID Connect#ofb73c59]]の検証と比べると、いくぶんか複雑らしい。 **参考 [#u43bc76c] -draft-ietf-oauth-pop-architecture-08~ OAuth 2.0 Proof-of-Possession (PoP) Security Architecture~ https://tools.ietf.org/html/draft-ietf-oauth-pop-architecture-08 ***その他 [#e3ae92b8] -OAuth2.0 Proof of Possession についてまとめてみた - hiyosi's blog~ https://hiyosi.tumblr.com/post/121441878998/oauth20-proof-of-possession-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E3%81%BF%E3%81%9F *[[OpenID Connect]] [#cd3ff39c] **概要 [#c6a16225] [[OpenID Connect]]では、Access Tokenではなく[[ID Token>OpenID Connect#ofb73c59]]に[[JWT]]を使用している。 **参考 [#baf5a1a4] -[[OpenID Connect]] ---- Tags: [[:認証基盤]], [[:ASP.NET Identity]], [[:OAuth]]