「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>JWTとOAuth2.0#f5007063]]

* 目次 [#m5c50d67]
#contents

*概要 [#a089122f]
-[[GoogleやMicrosoft、SalesforceなどのWebAPI認証の方式として採用されているもよう>WebAPIの認証#p99216b3]]。
-[[GoogleやMicrosoft、SalesforceなどのWebAPI認証の方式として採用されている>#uea38a81]]。

-事前に信頼関係を構築できるシステムからAPI接続する場合に有効な方法らしい。

*仕様 [#pae256bf]
**仕様の概要 [#ie2ca094]
-[[JWT]]作成のための証明書を生成 or 取得する。
-証明書をClient側(秘密鍵)とResource Server側(公開鍵)に登録する。
-Clientで[[JWT]]を署名作成し、Resource Serverに送信して、
-Resource Serverで[[JWT]]を検証し、Access Token(Bearer Token)を取得する。
-[[JWT]](JWS)作成のための証明書を生成 or 取得する。

-証明書を登録する。
--Client側(秘密鍵)
--Resource Server側(公開鍵)

-Clientで[[JWT]](JWS)を署名/作成し、Resource Serverにリクエスト、

-Resource Serverで[[JWT]](JWS)を検証し、Access Token(Bearer Token)をレスポンス。

-Clientから、Access Token(Bearer Token)を使用してResource Serverにアクセスする。

**仕様の詳細 [#e137da5b]

*参考 [#uea38a81]
-RFC 7523 - JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants~
https://tools.ietf.org/html/rfc7523

**Googleの例 [#pe004c1a]
以下を見ると、

-C#とCoreTweetを使って簡単にTwitterへツイートするbotを作る - 酢ろぐ!~
http://blog.ch3cooh.jp/entry/20140808/1407464147
--Google Analytics API を使って前日の PV を取得するコードを C# で書いてみた - しばやん雑記~
http://blog.shibayan.jp/entry/20140803/1407059293

通常の[[OAuth]] 2.0の
-[[Authorization Codeグラント種別>OAuth#yfeb403d]]
-[[Implicitグラント種別>OAuth#m5c2d510]]

以外に、

[[クライアント証明書(pfx形式の電子証明書)>証明書#sd119f77]]を使って、~
サービスアカウントで認証する方法がある模様。

ちなみに、ここでは、Google.Apis.Analytics Client Libraryに~
処理がラッピングされていたため。詳細が不明だったが、

以下を見ると、このClient Libraryの中では、[[JWT]]が使用されている模様。

-JWTを使ってGoogleAPIのアクセストークン取得する - Carpe Diem~
http://christina04.hatenablog.com/entry/2015/06/04/224159

-IdM実験室: [JWT/OAuth]Service Accountを使ってGoogle APIを利用する
--http://idmlab.eidentity.jp/2015/01/jwtoauthservice-accountgoogle-api.html
--http://idmlab.eidentity.jp/2015/01/jwtoauthservice-accountgoogle-api_5.html

これが、

>「JWT bearer token authorizationグラント種別」

の用例である模様。

-GoogleのOAuth 2.0実装からみえたClientの扱い - r-weblife~
http://d.hatena.ne.jp/ritou/20121104/1352036133

上記のサイトには、

>Service Accounts = JWT Bearer Token Profile

であることが明記されている。

**Microsoft ([[AzureAD>Microsoft Azure Active Directory]]) の例 [#vdf678b9]
[[Google>#pe004c1a]]と同様に、以下を見ると、

-Azure AD : ログインをしない Backend Server-Side アプリの開発 (Daemon など) – Tsmatz~
https://blogs.msdn.microsoft.com/tsmatsuz/2015/04/09/azure-ad-backend-server-side-deamon-service/
-Azure ADに登録されているAPI用のアクセストークンをJWTで取得するには | hrendoh's memo~
http://blog.hrendoh.com/active-directory-dotnet-daemon-certificate-credential/
--Authenticating to Azure AD in daemon apps with certificates | Microsoft Azure~
https://azure.microsoft.com/ja-jp/resources/samples/active-directory-dotnet-daemon-certificate-credential/

通常の[[OAuth]] 2.0の
-[[Authorization Codeグラント種別>OAuth#yfeb403d]]
-[[Implicitグラント種別>OAuth#m5c2d510]]

以外に、

>「JWT bearer token authorizationグラント種別」

をサポートしている模様。

ただし、処理は、[[ADAL(Active Directory Authentication Library)>https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-authentication-libraries]]~
にラップされているため[[JWT]]作成処理の詳細などを見ることは出来ない。

-active-directory-dotnet-daemon-certificate-credential/Program.cs~
at master · Azure-Samples/active-directory-dotnet-daemon-certificate-credential~
https://github.com/Azure-Samples/active-directory-dotnet-daemon-certificate-credential/blob/master/TodoListDaemonWithCert/Program.cs

**Salesforceの例 [#w40dd954]
以下のQiita記事を参照すると、Salesforceは、
-OAuth 2.0 JWT べアラートークンフロー
-OAuth 2.0 SAML ベアラーアサーションフロー

の2つのフローをサポートしている模様。

-OAuth2 JWT Bearer Token フローを使ってSalesforceへアクセスする - Qiita~
http://qiita.com/stomita/items/4542ce1b48e5fa849ef1

--help.salesforce.
---OAuth 2.0 JWT べアラートークンフロー~
https://help.salesforce.com/articleView?id=remoteaccess_oauth_jwt_flow.htm&language=ja&type=0
---OAuth 2.0 SAML ベアラーアサーションフロー~
https://help.salesforce.com/articleView?id=remoteaccess_oauth_SAML_bearer_flow.htm&language=ja&type=0

>原理はほぼ同じで、[[SAML]]より[[JWT]]のほうが動作環境的な制約は少ないとのこと。

----
Tags: [[:認証基盤]], [[:クレームベース認証]], [[:OAuth]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS