「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[WebAPI]] --[[認証基盤]] * 目次 [#r64739a3] #contents *概要 [#g7a5a85b] -[[WebAPI]]の認証方式について纏めてみた。 -基本的に[[OpenID]]([[OAuth]])系の技術が使用されている。 *技術 [#y691c9cb] 以下の様な技術が使われている。 **[[ベース クライアント セキュリティ モデル>リソース アクセス ストラテジ#d89f0147]]的な認証 [#pdf7d1f7] ***[[OAuth]] [#i9d2fe0c] ***[[OpenID Connect]] [#ffb5c42b] **[[サーバー信頼モデル>リソース アクセス ストラテジ#hb2e347c]]的な認証 [#g8f9d90d] ***[[証明書]] [#ka5abdc6] ***[[JWT]] [#pd84b613] [[OAuth]] 2.0 [[JWT]] Bearer Token Flow -JSON Web Token (JWT) Profile~ for OAuth 2.0 Client Authentication and Authorization Grants~ https://tools.ietf.org/html/rfc7523 ***[[SAML]] [#i14620f1] [[OAuth]] 2.0 [[SAML]] Bearer Token Flow -RFC 7522 - Security Assertion Markup Language (SAML) 2.0 Profile~ for OAuth 2.0 Client Authentication and Authorization Grants~ https://tools.ietf.org/html/rfc7522 *用例 [#ac0049bd] **[[ベース クライアント セキュリティ モデル>リソース アクセス ストラテジ#d89f0147]]的な認証 [#h004aa1d] ***認可を行う [#z3e4033c] [[OAuth]]ダンスの[[OAuth]] 2.0 が主流である模様。 ***認証を行う [#t9fe8437] [[OAuth]] 2.0 や [[OpenID Connect]]が使われる。 **[[サーバー信頼モデル>リソース アクセス ストラテジ#hb2e347c]]的な認証 [#p99216b3] ***Twitterの例 [#zabb2cc5] [[ココ>Windows 10 IoT Core#sf52910f]]を見ると解るが、~ -[Consumer Key] -[Consumer Secret] -[Access Token] -[Access Token Secret] が必要になる。 このため以下の様な方式になっているものと考える。 -キーの名称から、内部は[[OAuth 1.0a>http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art014]]で実装されている模様。 -[[OAuth]] 2.0であれば、[[サーバー信頼モデル>リソース アクセス ストラテジ#hb2e347c]]の場合、[[Client Credentialsグラント種別>OAuth#o9473080]]でイイと思うが、~ [[OAuth 1.0a>http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art014]]であるため?管理画面で、[Access Token]と[Access Token Secret]を取得している模様。 --参考 ---Twitter REST APIの使い方~ https://syncer.jp/Web/API/Twitter/REST_API/ ---Twitter の OAuth 1.0 認証 – 解説。 | みむらの手記手帳~ http://mimumimu.net/blog/2011/11/26/twitter-%E3%81%AE-oauth-1-0-%E8%AA%8D%E8%A8%BC-%E8%A7%A3%E8%AA%AC%E3%80%82/ ***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 これが(個人的に探し求めていた)、 >「[[OAuth]] 2.0 [[JWT]] Bearer Token Flow([[JWT]] Bearer Token Profile)」 の用例である模様。 -GoogleのOAuth 2.0実装からみえたClientの扱い - r-weblife~ http://d.hatena.ne.jp/ritou/20121104/1352036133 上記のサイトには、 >Service Accounts = JWT Bearer Token Profile であることが明記されている。 ***Microsoft(AzureAD)の例 [#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/ 通常の[[OAuth]] 2.0の -[[Authorization Codeグラント種別>OAuth#yfeb403d]] -[[Implicitグラント種別>OAuth#m5c2d510]] 以外に、 >「[[OAuth]] 2.0 [[JWT]] Bearer Token Flow([[JWT]] Bearer Token Profile)」 をサポートしている模様。 ***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]]のほうが動作環境的な制約は少ないとのこと。 ***その他 [#y64e882c] -OAuth 2.0 - JWT Bearer token authorization grant type~ https://developer.atlassian.com/cloud/jira/platform/oauth-2-jwt-bearer-token-authorization-grant-type/ **IoT deviceの認証 [#ofdfbda4] ***[[Wio Node (Wio Link)>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E9%9B%BB%E5%AD%90%E5%B7%A5%E4%BD%9C#c4b8bab8]] [#a0886d12] ***HCP(SAP HANA Cloud Platform) [#nf850c74] Wio Linkの生成したToken(Query Stringに指定)に加えて、~ HCPに登録・生成したDevice IDとOAuthのBearer TokenをAuthorizationヘッダに追加している。 -From WioLink via Beagle Bone Green (wireless) to SAP HCP IoT Service | SAP Blogs~ https://blogs.sap.com/2016/05/19/from-wiolink-via-beagle-bone-green-wireless-to-sap-hcp-iot-service/ ---- Tags: [[:プログラミング]], [[:通信技術]], [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET Web API]]