AzureAD и AzureADBearer в основном приложении asp.net выдают ошибку недопустимой подписи - PullRequest
1 голос
/ 05 июня 2019

Я использую AzureAD в приложении asp.net core 2. Я хочу использовать cookie и аутентификацию на предъявителя. У меня есть следующий код в файле запуска:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        //options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
            .AddAzureAD(options => Configuration.Bind("AzureAd", options))
            .AddAzureADBearer(options => Configuration.Bind("AzureAdClient", options));


    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), sqlServerOptions => sqlServerOptions.CommandTimeout(120)));


    //services.AddMvc();
    services.AddMvc(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
                        .RequireAuthenticatedUser()
                        .Build();
        //options.Filters.Add(new AuthorizeFilter(policy));
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

}

Я добавил авторизованный атрибут как:

[Authorize(AuthenticationSchemes = "AzureADBearer")]

Теперь при ударе от почтальона я могу получить токен на предъявителя, но когда я использую этот токен для доступа к этому API, я получаю ошибку недопустимой подписи:

WWW-Authenticate → Ошибка носителя = "invalid_token", error_description = "Подпись недействительна"

Есть идеи?

1 Ответ

0 голосов
/ 06 июня 2019

Попробуйте что-то вроде ниже, это должно работать.

services.AddAuthentication(sharedOptions =>
{
    sharedOptions.DefaultChallengeScheme = AzureADDefaults.AuthenticationScheme;
    sharedOptions.DefaultAuthenticateScheme = AzureADDefaults.AuthenticationScheme;
})
.AddAzureAD(options => Configuration.Bind("AzureAd", options))
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

и в приложении контроллера вы можете установить схему следующим образом:

[HttpGet]
[Authorize(AuthenticationSchemes = "AzureADBearer")]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...