Skip to content

MS_WebAPIAuthentication

nishi_74322014 edited this page Aug 3, 2026 · 2 revisions

WebAPIの認証

概要

  • WebAPI の認証方式について纏めてみた。
  • 基本的に OpenID(OAuth)系の技術が使用されている(MS_OpenIDOAuth.md)。

技術

以下の様な技術が使われている。

ベース クライアント セキュリティ モデル的な認証

要するに、Resource Owner(ユーザ)を認証する。
ベース クライアント セキュリティ モデルを参照。

  • OAuth(MS_OpenIDOAuth.md
  • OpenID Connect(MS_OpenIDOAuth.md

サーバー信頼モデル的な認証

要するに、Client(アプリケーション サーバ)を認証する。
サーバー信頼モデルを参照。

用例

ベース クライアント セキュリティ モデル的な認証

認可を行う

OAuth ダンスの OAuth 2.0 が主流である。

認証を行う

OAuth 2.0 や OpenID Connect が使われる。

補足: 「OAuth 2.0 で認証を行う」という表現には注意が必要である。 OAuth 2.0 は認可の仕様であり、 アクセス トークンは「誰が使ってよいか」を語らない。 認証(誰であるか)が必要なら、 OpenID Connect の ID トークンを使うのが正しい。 詳細はクレームベース認証を参照。

サーバー信頼モデル的な認証

Twitterの例

以下が必要になる。

  • [Consumer Key]
  • [Consumer Secret]
  • [Access Token]
  • [Access Token Secret]

このため以下の様な方式になっているものと考える。

  • キーの名称から、内部は OAuth 1.0a で実装されている模様。
  • OAuth 2.0 であれば、サーバー信頼モデルの場合、
    Client Credentials グラント種別でよいと思うが、
    OAuth 1.0a であるため管理画面で [Access Token] と [Access Token Secret] を
    取得している模様。

補足(最新化): X(旧 Twitter)の API は 現在 API v2 + OAuth 2.0(Authorization Code + PKCE / Client Credentials) が 主体となり、OAuth 1.0a は互換のために残る位置付けになっている。 また、API 自体が有償プラン中心に再編されている。

Google、Microsoft (Azure AD)、Salesforce の例

OAuth 2.0 JWT Bearer Token Flow が使用されている
(サービス アカウント/デーモン アプリの認証)。

補足: Microsoft Entra ID(旧 Azure AD)では、 クライアント シークレットの代わりに 証明書によるクライアント認証(private_key_jwt や、 Azure リソースであれば マネージド ID、 外部 CI/CD であれば ワークロード ID フェデレーションを使うことで、 シークレットを持ち回らない構成にできる。

IoT deviceの認証

HCP (SAP HANA Cloud Platform)

Wio Link の生成した Token(QueryString に指定)に加えて、
HCP に登録・生成した Device ID と OAuth の Bearer Token を
Authorization ヘッダに追加している。

関連:IoTの通信プロトコル

実装例

ASP.NET Web APIの例

JWT 形式の Access Token を FilterAttribute で認証して
ClaimsPrincipal を通じて連携する。
この場合、ASP.NET Identity には依存すること無く認証を行うことができる。

補足(最新化): ASP.NET Core では、 Microsoft.AspNetCore.Authentication.JwtBearer を使うのが標準である。

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://login.microsoftonline.com/{tenant}/v2.0";
        options.Audience  = "api://my-api";
    });

検証時は、署名だけでなく iss / aud / exp / nbf を必ず確認すること (aud の検証漏れは、別 API 向けのトークンを受理してしまう典型的な脆弱性)。

参考


Tags: プログラミング, 通信技術, .NET Core, ASP.NET, ASP.NET Web API

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally