マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

ASP.NET Identityの、OAuth 2.0によるセキュアトークンサービス(STS)のEndpoint追加実装。

準備

OAuth2.0 Server、Client共に以下からダウンロード可能。

このサンプルは、VS2013・2015で、そのままF5実行可能で非常に便利。

検証

ダウンロードしたサンプルを使用して、以下のシナリオの検証ができる。

Authorization Codeグラント種別

Implicitグラント種別

Resource Owner Password Credentialsグラント種別

Client Credentialsグラント種別

ASP.NET IdentityでOAuth2のRFCに追加されている仕様

RFCに規定のない認証の仕掛け

  • 認証には、(基本的に、)ASP.NET Identityを使用する。
  • Bearer Tokenの発行には、ClaimsIdentity?を使用する。
  • ASP.NET MVCアプリケーションの認可エンドポイント上
  • Cookie認証チケットからClaimsIdentity?を生成できる。
    AuthenticateResult ticket = this.AuthenticationManager.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie).Result;
    ClaimsIdentity identity = (ticket != null) ? ticket.Identity : null;
    
  • 以下の方法でTokenを発行する。
    「Authorization Codeグラント種別」では仲介トークンを、
    「Implicitグラント種別」ではAccess Tokenを生成する。
    this.AuthenticationManager.SignIn(identity);
  • OAuthAuthorizationServerProvider?のTokenエンドポイント上
  • ユーザ情報を使用してClaimsIdentity?を生成する。
    ClaimsIdentity identity = await userManager.CreateIdentityAsync(
                   user, DefaultAuthenticationTypes.ExternalBearer);
  • 以下の方法でTokenを発行する。
    「Resource Owner Password Credentialsグラント種別」
    「Client Credentialsグラント種別」の両方でAccess Tokenを生成する。
    context.Validated(identity);
  • ClaimsIdentity?にCustomの情報を格納する場合、以下の様にClaimを追加する。
    identity.AddClaim(new Claim("urn:oauth:scope", scope));

参考(サービス / ミドルウェア毎の仕様の違い)

技術文書中での Shall / Should / May」があるため、
サービス / ミドルウェア毎に仕様は異なってくる。以下が参考になる。

やはり、サービスによって扱いがマチマチなのは、
redirect_uriパラメタとstateパラメタであるもよう。

Bearer Tokenを暗号化・復号化する秘密鍵

  • 認可サーバ(Authorization Server)とリソースサーバ(Resource Server)が同じマシン上に無い場合、
    Bearer Tokenを暗号化・復号化する秘密鍵を双方のマシン間で一致させる必要がある。
  • これには、以下のように、machinekeyを両方のweb.configファイルに追加する必要がある。
    <system.web>
        <machineKey decryptionKey="Enter decryption Key here" 
            validation="SHA1" 
            validationKey="Enter validation Key here" />
    </system.web>

machineKeyセクションの生成には、以下のツールが使えそう。

Bearer TokenをJWTアサーションに変更する方法

ASP.NET Identity(Identity 2.0)(net45)で通常サポートされないSTS機能

OAuth2拡張

OpenID Connect

参考

The ASP.NET Site

このコンテンツは以下の様な構成になっている。

Download the sample code.

以下から、サンプル・コードをダウンロードできる。

http://code.msdn.microsoft.com/OWIN-OAuth-20-Authorization-ba2b8783/file/114932/1/AuthorizationServer.zip

Create an Authorization Server.

  • このAuthorization ServerはOAuthの4つのフローをサポートしている。
    • Authorization Code Grant Client
    • Implicit Grant Client
    • Resource Owner Password Credentials Grant Client
    • Client Credentials Grant Client
  • サーバーの設定と実装
    • OWIN Startup classでの設定
  • OAuthAuthorizationServerProvider?の実装
  • ValidateClientRedirectUri?
    (Authorization Code, Implicitグラント種別)
  • ValidateClientAuthentication?
    (Resource Owner Password Credentials, Client Credentialsグラント種別)
  • GrantResourceOwnerCredentials?
    (Resource Owner Password Credentialsグラント種別)
  • GrantClientCredetails?
    (Client Credentialsグラント種別)
  • AuthorizeEndpoint?の実装
    (Authorization Code, Implicitグラント種別)

Creating a Resource Server.

アクセストークンによって保護されたResource ServerのEndpointを作成。

Create OAuth 2.0 Clients.

.NETクライアント・アプリからHTTPアクセスする際のライブラリとしては、DotNetOpenAuth.OAuth2を使用している。

  • Authorization Code Grant Client
    WebApplication?として実装。
  • Resource Owner Password Credentials Grant Client
    コンソール・アプリケーションで実装。
  • Client Credentials Grant Client
    コンソール・アプリケーションで実装。

関連する情報

その他のサイト

実装方法の調査で参照にしたサイト。


Tags: :.NET開発, :ASP.NET, :ASP.NET MVC, :ASP.NET SPA, ASP.NET Web API, :ASP.NET Identity, :OAuth, :認証基盤, :セキュリティ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-04 (水) 17:48:59 (534d)