Skip to content

MS_WebAPIAuthentication

nishi_74322014 edited this page Aug 3, 2026 · 2 revisions

WebAPIの認証

概要

技術

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

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

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

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

要するに、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