autentikasi netcore2 dengan Azure Active Directory: Tanda tangan tidak valid

Saya memiliki webapi dan saya perlu memiliki otentikasi, saya melakukan ini dengan AAD di V1.

Saya sudah siap, dengan tukang pos saya bisa mendapatkan token, tetapi, setiap kali saya mencoba membuat permintaan ke api, saya mendapat kesalahan 401:

Bearer error="invalid_token", error_description="Tanda tangan tidak valid"

ini adalah kode pada ConfigurationServices:

    services.AddAuthentication(sharedOptions =>
    {
        sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

    })
    .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

ini adalah kelas yang dihasilkan untuk otentikasi Azure:

    public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder)
        => builder.AddAzureAdBearer(_ => { });

    public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder, Action<AzureAdOptions> configureOptions)
    {
        builder.Services.Configure(configureOptions);
        builder.Services.AddSingleton<IConfigureOptions<JwtBearerOptions>, ConfigureAzureOptions>();
        builder.AddJwtBearer();
        return builder;
    }

    private class ConfigureAzureOptions: IConfigureNamedOptions<JwtBearerOptions>
    {
        private readonly AzureAdOptions _azureOptions;

        public ConfigureAzureOptions(IOptions<AzureAdOptions> azureOptions)
        {
            _azureOptions = azureOptions.Value;
        }

        public void Configure(string name, JwtBearerOptions options)
        {
            options.Audience = _azureOptions.ClientId;
            options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
        }

        public void Configure(JwtBearerOptions options)
        {
            Configure(Options.DefaultName, options);
        }
    }

Apa yang hilang di sini? bisa tolong bantu?

Terima kasih


person HLourenco    schedule 26.09.2017    source sumber
comment
Bagaimana Anda mengirimkan token pembawa? Seharusnya ada tajuk Authorization Bearer <your token goes here>. Lihat juga jawaban ini untuk melihat apakah ini membantu Anda dengan konfigurasi API.   -  person pcdev    schedule 27.09.2017
comment
Ya, saya punya headernya...   -  person HLourenco    schedule 27.09.2017
comment
@HLourenco apakah Anda ingat jika Anda pernah memperbaiki masalah ini? Jika ya, bagaimana caranya? Saya mengalami masalah yang sama...   -  person Gabriel Bourgault    schedule 26.07.2018
comment
@Gabriel Bourgault Saya telah memecahkan masalah ini, menurut saya yang saya lakukan adalah, di AAD saya mengubah izin aplikasi saya dan sejak saat itu, token telah valid karena entitas dikenali   -  person HLourenco    schedule 27.07.2018


Jawaban (2)


Seperti yang dikatakan pcdev dalam komentarnya, pastikan Anda menambahkan header Otorisasi ke semua permintaan.

Token JWT harus terdiri dari tiga bagian yang dipisahkan oleh titik. Tanda tangannya adalah bagian ketiga.

Anda dapat memeriksa token yang Anda kirim di http://jwt.calebb.net atau https://jwt.io

person RasmusW    schedule 27.09.2017
comment
Tidak berhasil, saya memiliki header yang benar tetapi tidak berhasil juga. Tanda tangan memiliki [tanda tangan] di bagian akhir. Ada hal lain tentang itu? - person HLourenco; 27.09.2017

Saya memiliki masalah serupa dan hanya menggunakan yang berikut ini dan berhasil.

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
            .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
person colin powell    schedule 20.03.2019