.Net core api с AD B2C OAuth 2.0 — ошибка Invalid_token

#asp.net-core #oauth-2.0 #azure-ad-b2c

#asp.net-core #oauth-2.0 #azure-ad-b2c

Вопрос:

Я слежу за этим ресурсом. Я могу успешно получить токен, но получаю 401 при использовании токена во втором вызове моего api. В нем говорится, что ошибка носителя =’invalid_token’. Ранее он выдавал «Недопустимый эмитент», поэтому я расшифровал токен, чтобы использовать эмитента в поле «Экземпляр» AppSettings.json. Ниже приведены настройки приложений и токен. Что я делаю не так?

AppSettings.json

 {
"AzureAdB2C": {
"Instance": "https://login.microsoftonline.com/xxxxxxxxxxxxxxxxxxxxx/v2.0/",
"ClientId": "452gfsgsdfgsdgssfs5425234",
"Domain": "xxxxxxxxxxxxxxx.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1_Auth-SignUpIn"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
  

токен

 {
"iss": "https://login.microsoftonline.com/23423fsf234234sfsd42342vsx2542/v2.0/",
"exp": 1551878022,
"nbf": 1551874422,
"aud": "ee965664-d1e3-4144-939a-11f77c523b50",
"oid": "a9ee8ebb-433d-424b-ae24-48c73ae9969c",
"sub": "a9ee8ebb-433d-424b-ae24-48c73ae9969c",
"name": "unknown",
"extension_xxxID": "9f27fd88-7faf-e411-80e6-005056851bfe",
"emails": [
"dfgdfgadfgadfg@dgadg.com"
],
"tfp": "B2C_1_Auth-SignUpIn",
"scp": "user_impersonation",
"azp": "4453gdfgdf53535bddhdh",
"ver": "1.0",
"iat": 1551874422
}
  

Экземпляр AD B2C

введите описание изображения здесь

Настройка Azure AD B2C AD B2C

Postman — revalapi выделен uri зарегистрированного приложения на предыдущем снимке

введите описание изображения здесь

Токен

введите описание изображения здесь

Ошибка

введите описание изображения здесь

Комментарии:

1. Второй вызов относится к вашему собственному api?

2. ДА. Я отредактировал вопрос, чтобы отразить это, если это не было очевидно.

3. Когда вы запрашиваете access_token, ресурс также является тем же API?

4. Я использовал неявный поток, как описано здесь

5. @rohit Я думаю, что теперь это может решить вашу проблему. Если у вас все еще есть какие-либо вопросы, не стесняйтесь спрашивать. Спасибо.

Ответ №1:

ОК. Похоже, AD B2C .Net Core не устраивает onmicrosoft.com URI, хотя ресурс Microsoft docs утверждает, что это так. Смотрите здесь. Мне пришлось использовать b2clogin.com uri, как показано на скриншотах ниже. Надеюсь, это кому-то поможет.

Почтальон

введите описание изображения здесь

AppSettings.json

введите описание изображения здесь

Startup.Auth.cs

         public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
            services.AddApplicationInsightsTelemetry();             
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
            app.UseAuthentication();
            app.UseHttpsRedirection();
            app.UseMvc();            
        }
  

Ответ №2:

Для регистрации вашего приложения B2C dotnet core сначала вы должны войти в свой клиент B2C.

После успешной регистрации настройте следующий шаг для неявного потока предоставления.

URL-адреса для ответов

Убедитесь, что вы выполнили этот шаг соответствующим образом:

Перейдите в настройки и добавьте URL обратного вызова postman в:https://www.getpostman.com/oauth2/callback

Как только вы правильно введете этот URL-адрес, нажмите «Сохранить» вверху слева.

Смотрите снимок экрана ниже:

введите описание изображения здесь

Редактировать манифест

Для получения неявного общего потока щелкните по манифесту вашего приложения и найдите в свойстве oauth2AllowImplicitFlow значение true.

смотрите снимок экрана ниже:

введите описание изображения здесь

Ваши настройки для azure B2C выполнены для неявного вызова API потока предоставления.

Почтальон

Теперь запустите свой post man и выберите тип запроса как OAuth 2.0, как показано ниже:

введите описание изображения здесь

Теперь нажмите «Получить новый токен доступа», и появится новое всплывающее окно

Смотрите снимок экрана ниже:

Добавьте свой идентификатор клиента в URL авторизации следующим образом :

https://login.microsoftonline.com/YourB2CTenantId/oauth2/authorize?resource=https://graph.microsoft.com

Задайте свой идентификатор клиента

Задайте область, к которой вы хотите получить доступ

введите описание изображения здесь

Теперь нажмите на токен запроса, В ответ вы получите свой неявный токен доступа grant:

смотрите снимок экрана:

введите описание изображения здесь

Доступ к данным с помощью этого токена:

Скопируйте токен, к которому вы уже обращались, в текстовое поле Token и выберите тип токена в качестве токена на предъявителя

Смотрите снимок экрана ниже:

введите описание изображения здесь

Итак, сложная часть для неявного потока — установить для свойства манифеста oauth2AllowImplicitFlow значение true

Надеюсь, это могло бы решить вашу проблему. Спасибо