Azure Active Directory - HTTP/1.1 401 Tidak Sah - Layanan Windows

Punya masalah dengan Azure Auth. Mendapatkan 401 Tidak Sah saat memanggil WebAPI yang Dihosting di Azure.

Berikut dasar-dasarnya: Ikuti tutorial ini - https://azure.microsoft.com/en-us/documentation/samples/active-directory-dotnet-daemon/

Terdaftar 2 Aplikasi:

  1. Layanan Windows
  2. API Web

Layanan Windows memanggil STS dan Berhasil mendapatkan JWT. Kemudian mencoba meneruskan token tersebut ke WebAPI yang dihosting di azurewebsites.net.

Ini kode saya untuk memanggil STS (Baru saja dibungkus dengan Kelas Auth):

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;
        }
    }
}

Saya kemudian menggunakan kelas Auth dan AuthResult untuk memanggil 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);
    }
}

Respons HttpResponseMessage memberikan Tidak Sah

Saya menggunakan fiddler untuk mendapatkan Permintaan dan Respons:

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

Tolonglah?

Masalah utama yang saya curigai adalah di Azure, Aplikasi AAD tidak memiliki akses ke Aplikasi Web API. Saya mencoba menambahkannya melalui Pengguna tetapi ketika saya mencari Aplikasi itu sebagai pengguna tidak dapat menemukannya. Aplikasi Terdaftar berada di Direktori Azure Active Directory yang berbeda.


person Fox    schedule 24.05.2016    source sumber
comment
Apakah Anda kebetulan mengaktifkan Otentikasi / Otorisasi di portal? Beberapa orang mengalami masalah serupa saat mereka menggunakan Autentikasi/Otorisasi terintegrasi DAN middleware autentikasi Azure AD OWIN di aplikasi web yang sama.   -  person Chris Gillum    schedule 24.05.2016
comment
Hai @Phillippe. Ya, saya mengaktifkan Otentikasi itu di Aplikasi Web di Portal. Apakah itu tidak perlu?   -  person Fox    schedule 24.05.2016
comment
Maaf, @ChrisGillum. Anda memposting komentar itu.   -  person Fox    schedule 24.05.2016
comment
@ChrisGillum. Baru saja mengalami momen bola lampu. Anda benar. Saya mengaktifkan pengaturan Azure Auth yang salah! Otentikasi itulah letak masalahnya. Saya berasumsi hanya UseWindowsAzureActiveDirectoryBearerAuthentication yang diperlukan   -  person Fox    schedule 24.05.2016
comment
Api apa yang ingin Anda panggil? Kesalahan menunjukkan token akses Anda tidak dapat mengakses api itu...   -  person Lily_user4045    schedule 24.05.2016
comment
Terima kasih @Lily_user4045. Masalah ditemukan. Perlu mengujinya tetapi Chris menyelesaikannya dengan jawabannya   -  person Fox    schedule 24.05.2016
comment
@ChrisGillum. Jika Anda dapat memposting jawaban Anda sebagai jawaban, saya akan menandainya sebagai jawaban :-)   -  person Fox    schedule 24.05.2016
comment
@Fox hebat! Saya telah memposting komentar saya sebagai jawaban. :)   -  person Chris Gillum    schedule 24.05.2016


Jawaban (1)


Apakah Anda kebetulan mengaktifkan Otentikasi / Otorisasi di portal? Beberapa orang mengalami masalah serupa saat mereka menggunakan Autentikasi/Otorisasi terintegrasi DAN middleware autentikasi Azure AD OWIN di aplikasi web yang sama. Cara yang benar untuk menyiapkan aplikasi Anda adalah dengan menggunakan salah satu aplikasi karena keduanya saat ini tidak berfungsi dengan baik.

person Chris Gillum    schedule 24.05.2016
comment
Menghapus Azure AD Auth dan memperbaikinya. - person Fox; 24.05.2016