#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
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 авторизации следующим образом :
Задайте свой идентификатор клиента
Задайте область, к которой вы хотите получить доступ
Теперь нажмите на токен запроса, В ответ вы получите свой неявный токен доступа grant:
смотрите снимок экрана:
Доступ к данным с помощью этого токена:
Скопируйте токен, к которому вы уже обращались, в текстовое поле Token и выберите тип токена в качестве токена на предъявителя
Смотрите снимок экрана ниже:
Итак, сложная часть для неявного потока — установить для свойства манифеста oauth2AllowImplicitFlow значение true
Надеюсь, это могло бы решить вашу проблему. Спасибо