2016-05-24 30 views
1

Azure Authに問題があります。 AzureでホストされているWebAPIを呼び出すときは、401 Unauthorizedを取得する。ここでAzure AD - HTTP/1.1 401不正な - Windowsサービス

は基本だ: は、このチュートリアルに続く - https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-daemon/

登録2用途:

  1. Windowsサービス

WebAPIのWindowsサービスは、STSを呼び出し、正常にJWTを取得します。次に、そのトークンをazurewebsites.netでホストされているWebAPIに渡そうとします。ここで

は(ジャスト認証クラスに包まれた)STSを呼び出すための私のコードです:

public class AzureAuth 
{ 

    private AuthenticationContext authContext; 
    private ClientCredential clientCredential; 

    protected string AzureADInstanceName; 
    protected string AzureADTenancyName; 

    protected string AzureADApplicationClientId; 
    protected string AzureADApplicationSecret; 
    protected string AzureADApplicationAppId; 


    public AzureAuth(string azureADInstanceName, string azureADTenancyName, string azureADApplicationClientId, string azureADApplicationSecret, string azureADApplicationAppId) 
    { 
     this.AzureADInstanceName = azureADInstanceName; 
     this.AzureADTenancyName = azureADTenancyName; 
     this.AzureADApplicationClientId = azureADApplicationClientId; 
     this.AzureADApplicationSecret = azureADApplicationSecret; 
     this.AzureADApplicationAppId = azureADApplicationAppId; 

     string authority = string.Format(CultureInfo.InvariantCulture, AzureADInstanceName, AzureADTenancyName); 
     this.authContext = new AuthenticationContext(authority); 
     this.clientCredential = new ClientCredential(AzureADApplicationClientId, AzureADApplicationSecret); 
    } 

    public async Task ExecuteGetWithAADAutToken<T>(Action<AuthenticationResult> AfterAuthAction) 
    { 
     AuthenticationResult result = null; 
     try 
     { 
      result = await authContext.AcquireTokenAsync(this.AzureADApplicationAppId, this.clientCredential); 
      AfterAuthAction(result); 
     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
    } 
} 

私はその後、認証クラスとAuthResultはWEBAPIをコールすることを使用しています:

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(getEndPointUri); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", res.AccessToken); 

    HttpResponseMessage response = await client.GetAsync("/api/field"); 

    if (response.IsSuccessStatusCode) 
    { 
     var resultStringJSON = await response.Content.ReadAsStringAsync(); 
     Console.WriteLine(resultStringJSON); 
    } 
    else 
    { 
     var resulterrorStringJSON = await response.Content.ReadAsStringAsync(); 
     Console.WriteLine(resulterrorStringJSON); 
    } 
} 

HttpResponseMessage応答は、私がリクエストとレスポンスを取得するためにシオマネキを使用無断

を与えています

GET https://xxxxxxxx.azurewebsites.net/api/someapi HTTP/1.1 
Accept: application/json 
Authorization: Bearer XXXXXXXXX 
Host: xxxxxx.azurewebsites.net 


HTTP/1.1 401 Unauthorized 
Content-Length: 0 
Server: Microsoft-IIS/8.0 
WWW-Authenticate: Bearer realm="xxxxxxx.azurewebsites.net" 
X-Powered-By: ASP.NET 
Set-Cookie: ARRAffinity=697493f3974009aeb448f562d1b389f79aa6008071be1244c77f3f1d3849f5f0;Path=/;Domain=xxxxxxxx.azurewebsites.net 
Date: Tue, 24 May 2016 03:59:15 GMT 

助けてください?

私が疑う主な問題は、Azureでは、AADアプリケーションがWeb APIアプリケーションにアクセスできないことです。私はユーザーを介して追加しようとしましたが、そのアプリケーションをユーザーとして検索すると、そのユーザーを見つけることができません。登録されたアプリケーションは、別のAzure ADディレクトリにあります。

+1

偶然、ポータルで認証/認可を有効にしましたか?同じWebアプリケーションで統合認証/認可とOWIN Azure AD認証ミドルウェアの両方を使用すると、同様の問題が発生しています。 –

+0

こんにちは@Phillippe。はい、ポータルのWebアプリケーションでその認証を有効にしました。それは必要ではないですか? – Fox

+0

申し訳ありません、@ChrisGillum。あなたはそのコメントを投稿しました。 – Fox

答えて

2

偶然、ポータルで認証/認可を有効にしましたか?同じWebアプリケーションで統合認証/認可とOWIN Azure AD認証ミドルウェアの両方を使用すると、同様の問題が発生しています。あなたのアプリをセットアップする正しい方法は、現在一緒にうまく遊んでいないので、どちらか一方を使うことです。

+0

Azure AD Authを削除して修正しました。 – Fox

関連する問題