2016-08-30 41 views
9

を呼び出すためにJWTベアラートークンを作成し、私はASP.NETコアのWeb APIを構築しています(app.UseJwtBearerAuthentication経由確保)のAzure ADによって確保されますASP.NETコアMVC認証ユーザーし、Web API

私は、WebAPIと呼ぶASP.NET Core MVCコントローラ(app.UseOpenIdConnectAuthenticationによって保護されています)を構築しています。

OpenID Connect Basicクライアント実装者のガイドに記載されているように、認証フローを実装しようとしています。

このパターンのサンプルコードです。

一例はここにある:

/active-directory-dotnet-webapp-webapi-openidconnect/blob/master/TodoListWebApp/App_Start/Startup.Auth.cs)

が使用されています.NET.NETコアOWINです。

OnAuthorizationCodeReceivedメソッドを使用し、AcquireTokenByAuthorizationCodeAsynchに電話して、WebAPIへのリクエストで使用するトークンを取得します。

私はASP.NET MVCコアの類似パターンを構築しようとした際、私は以下を参照してください。

  1. 私はMVCのアプリを設定する場合。 UseOpenIdConnectAuthenticationをデフォルトに設定すると、システムにログインできますが、認証コードが返ってくることはありません。私のために発生するイベントは、上記のAuthorizationCodeReceivedイベントの代わりにOnTokenValidatedイベントです。それはアイデンティティとトークンを持っています。これは素晴らしいことです。
  2. MVCのアプリケーションを設定するとき。 UseOpenIdConnectAuthenticationresponse-type = “code”、コードが返ってくると、OnAuthorizationCodeReceivedイベントが発生しますが、IDは返されません。

[のために私のazureアプリケーションマニフェストが設定されました。この場合、ユーザーの認証とトークンの生成は1ステップに圧縮されているため、必要なだけ安全ではないため、私はfalseに設定します。]

さらに調査した結果、Asp.Net Coreインフラストラクチャは、複数の独立した認証ミドルウェアのエントリを処理するように設計されており、

Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

ことは、あなたがしようとした場合「許可されていません」というエラーをスローするようにコーディングされていますを使用するワークフローはJwtBearerとなります。

したがって、私はその複数のミドルウェアアプローチに従わなければならないようです。ログイン用のCookieベースのミドルウェア1つと、このアプリケーションにリンクされたサービスにアクセスするためのベアラトークン用のベアラトークンベースのミドルウェア1つ。

https://docs.asp.net/en/latest/security/authorization/limitingidentitybyscheme.htmlに記載されている

この機能(複数の認証ミドルウェア)(代わりに、サービスへの呼び出し認証コードを受信した後に行われるOWINサンプルからモデル)誰でも例を持っていこのため?それとも私はまだこの間違ったことを考えていますか?

+1

トピックを共有することはありますか?私はほぼ同じことをやろうとしており、ASP.Net Coreを使ってこのトピックのサンプルを見つけることはできません。 – zuckerthoben

答えて

0

コードとともにIDを取得する必要がある場合は、リクエスト=>response_type=code+id_tokenでこれを指定する必要があります。

両方を取得した後、私は、あなたのユーザーのためにクッキーを設定し、クライアントの認証とトークンを要求できることを願っています。

確かに正確なシナリオはAuthorize access to web applications using OpenID Connect and Azure Active Directoryに記載されています。

関連する問題