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

-[[戻る>WebAPI]]

* 目次 [#r64739a3]
#contents

*概要 [#g7a5a85b]
WebAPIの認証方式について纏めてみた。

*技術 [#y691c9cb]
以下の様な技術が使われている。

**[[OAuth]] [#i9d2fe0c]
**[[OpenID Connect]] [#ffb5c42b]

**[[証明書]] [#ka5abdc6]
**[[JWT]] [#pd84b613]

*用例 [#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に~
処理がラッピングされていたため。詳細が不明だったが、

Google.Apis.Analytics Client Libraryにラップされていたため不明だったが、~
以下を見ると、このClient Libraryの中では、[[JWT]]が使用されている模様。

-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

***Twitterの例 [#zabb2cc5]
[[ココ>Windows 10 IoT Core#sf52910f]]を見ると解るが、~
-[Consumer Key]
-[Consumer Secret]
-[Access Token]
-[Access Token Secret]
***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 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]を取得している模様。
>「[[OAuth]] 2.0 [[JWT]] Bearer Token Flow([[JWT]] Bearer Token Profile)」

--参考
---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/
をサポートしている模様。


----
Tags: [[:プログラミング]], [[:通信技術]], [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET Web API]]


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