2016-12-21 1 views
0

を呼び出すために、私は、この点になった:はHttpClientをいくつかのMicrosoftサンプル後アズールAD-保護されたサイト

ASP.NETコアのセットアップ:

app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    ClientId = Configuration["Authentication:AzureAD:ClientId"], 
    Authority = Configuration["Authentication:AzureAd:Authority"], 
    ResponseType = OpenIdConnectResponseType.IdToken, 
    AutomaticAuthenticate = true, 
    TokenValidationParameters = new TokenValidationParameters() 
}); 

/AuthorizationTestエンドポイント:

[HttpGet] 
[Authorize] 
public IActionResult Get() 
{ 
    return Ok("SAMPLE TEXT - if you can read this then call it a day :)"); 
} 

クライアント:

try 
{ 
    var result = await authContext.AcquireTokenAsync(WebApiResourceId, WebApiClientId, WebApiRedirectUri, new PlatformParameters(PromptBehavior.Auto)); 
    authorizedClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 

    var authorizedMessage = await authorizedClient.GetAsync("/AuthorizationTest"); 
    var statusCode = authorizedMessage.StatusCode.ToString(); 
    var message = await authorizedMessage.Content.ReadAsStringAsync(); 
    webBrowser.NavigateToString(message); 
} 

そしてauthorizedClientは次のように開始されます。

private static HttpClientHandler handler = new HttpClientHandler 
{ 
    AllowAutoRedirect = true, 
    CookieContainer = new CookieContainer(), 
    UseCookies = true 
}; 
private static HttpClient authorizedClient = new HttpClient(handler, false) { BaseAddress = WebApiBaseUri }; 

私だけBASEADDRESSでそれを初期化するために使用され、後でここでSOの答えは次のハンドラを追加しました。

問題:私が正しくAADからトークンを取得していても
は、WEBAPIエンドポイントからの応答が(自動リダイレクト後の)HTMLがある
エラーとMSのログインページで、「あなたのブラウザはありますクッキーをブロックするように設定されています..... "

HttpClientを動作させるために何を変更する必要がありますか?または、Cookieを使用しないようにWebApiの設定を変更することはできますか?後者の選択肢では、私は他の選択肢を見つけることができませんでした。

+0

Open ID ConnectではなくAzure ADベアラートークン認証を使用する必要があります。 Azure ADから得られるものはAPIに使用されるトークンですが、Open ID Connectミドルウェアはユーザ向けのアプリケーション用です(チャレンジを受け取った場合にサインインのためにユーザをAADにリダイレクトします)。 – juunas

+0

@juunas私が見なければならないサンプル/パッケージはありますか? –

+1

パッケージ「Microsoft.AspNetCore.Authentication.JwtBearer」が通常使用されていますが、サンプルAPI [here](https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore/blob/)があります。マスター/ TodoListService/project.json)。 – juunas

答えて

2

コメントで説明したように、パッケージMicrosoft.AspNetCore.Authentication.JwtBearerのJWTベアラトークンミドルウェアを使用する必要があります。

Open ID Connectミドルウェアは、アクセストークンを認証するのではなく、ユーザーをサインインページにリダイレクトするように設計されています。 JWTベアラトークンミドルウェアの使用例は、https://github.com/Azure-Samples/active-directory-dotnet-native-aspnetcore/blob/master/TodoListService/Startup.csにあります。

関連する問題