#asp.net-mvc #azure #authentication #azure-active-directory #azure-ad-b2c
#asp.net-mvc #azure #аутентификация #azure-active-directory #azure-ad-b2c
Вопрос:
Я хочу иметь приложение в Azure (простое asp.net приложение mvc), которое удерживает пользователей в azure, я хочу, чтобы это было сделано azure b2c.
Я зарегистрировал приложение в Azure и поместил все конфигурации в appsettings.json что я заметил, так это то, что URL-адрес, сгенерированный приложением, не совпадает с URL-адресом из azure:
Вот из приложения:
‘https://isthereanynewscodeblast.b2clogin.com/isthereanynewscodeblast.onmicrosoft.com/B2C_1_eclaims_login/v2.0/.well-known/openid-configuration’
Вот из B2C:
‘https://isthereanynewscodeblast.b2clogin.com/isthereanynewscodeblast.onmicrosoft.com//v2.0/.well-known/openid-configuration’
Похоже, но не то же самое. Я обнаружил, что URL-адрес генерируется AzureADB2COpenIdConnectOptionsConfiguration
в этом методе:
internal static string BuildAuthority(AzureADB2COptions AzureADB2COptions)
{
var baseUri = new Uri(AzureADB2COptions.Instance);
var pathBase = baseUri.PathAndQuery.TrimEnd('/');
var domain = AzureADB2COptions.Domain;
var policy = AzureADB2COptions.DefaultPolicy;
return new Uri(baseUri, new PathString($"{pathBase}/{domain}/{policy}/v2.0")).ToString();
}
И вот мой файл .json
"AzureAdB2C": {
"Instance": "https://isthereanynewscodeblast.b2clogin.com",
"Domain": "isthereanynewscodeblast.onmicrosoft.com",
"ClientId": "guid-of-client",
"CallbackPath": "/signin-oidc",
"SignUpSignInPolicyId": "B2C_1_eclaims_login ",
"ResetPasswordPolicyId": "B2C_1_eclaims_reset",
"EditProfilePolicyId": "B2C_1_eclaims_edit"
},
Которая не соответствует конечной точке из AAD 🙁
Код взят из nuget: Microsoft.AspNetCore.Authorization
Она не защищена и не виртуальна, поэтому я не вижу никакой возможности переопределить ее.
Итак, мои вопросы:
- есть ли способ как-то справиться с этим, чтобы приложение могло взаимодействовать с azure
- есть ли другой способ зарегистрировать приложение, простой, как этот:
services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
.AddAzureADB2C(options =>
{
Configuration.Bind("AzureAdB2C", options);
});
//РЕДАКТИРОВАТЬ:
Вот манифест из регистрации приложения:
{
"id": "438a430b-4e80-4c6c-8f45-dfca460b2e03",
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": 2,
"addIns": [],
"allowPublicClient": null,
"appId": "44234136-6eee-431f-98ea-668343d7a3fd",
"appRoles": [],
"oauth2AllowUrlPathMatching": false,
"createdDateTime": "2020-08-18T22:32:28Z",
"groupMembershipClaims": null,
"identifierUris": [],
"informationalUrls": {
"termsOfService": null,
"support": null,
"privacy": null,
"marketing": null
},
"keyCredentials": [],
"knownClientApplications": [],
"logoUrl": null,
"logoutUrl": null,
"name": "user-log-test",
"oauth2AllowIdTokenImplicitFlow": false,
"oauth2AllowImplicitFlow": false,
"oauth2Permissions": [],
"oauth2RequirePostResponse": false,
"optionalClaims": null,
"orgRestrictions": [],
"parentalControlSettings": {
"countriesBlockedForMinors": [],
"legalAgeGroupRule": "Allow"
},
"passwordCredentials": [],
"preAuthorizedApplications": [],
"publisherDomain": "isthereanynewscodeblast.onmicrosoft.com",
"replyUrlsWithType": [
{
"url": "https://localhost:44395/signin-oidc",
"type": "Web"
}
],
"requiredResourceAccess": [
{
"resourceAppId": "00000003-0000-0000-c000-000000000000",
"resourceAccess": [
{
"id": "37f7f235-527c-4136-accd-4a02d197296e",
"type": "Scope"
},
{
"id": "7427e0e9-2fba-42fe-b0c0-848c9e6a8182",
"type": "Scope"
}
]
}
],
"samlMetadataUrl": null,
"signInUrl": null,
"signInAudience": "AzureADandPersonalMicrosoftAccount",
"tags": [],
"tokenEncryptionKeyId": null
}
Ответ №1:
Не могли бы вы, пожалуйста, попробовать использовать этот пример приложения для b2c, который даст вам представление о том, как использовать точки b2c. Он поставляется с предварительно настроенными конечными точками (ниже), которые вы можете заменить своим клиентом и политикой позже для тестирования.
{
"AzureAdB2C": {
"Instance": "https://fabrikamb2c.b2clogin.com",
"ClientId": "90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6",
"Domain": "fabrikamb2c.onmicrosoft.com",
"SignedOutCallbackPath": "/signout/B2C_1_susi",
"SignUpSignInPolicyId": "b2c_1_susi",
"ResetPasswordPolicyId": "b2c_1_reset",
"EditProfilePolicyId": "b2c_1_edit_profile"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Комментарии:
1. Привет, @ Razi, я пытаюсь с тем же результатом: Исключение IOException: IDX20807: не удается извлечь документ из: ‘ isthereanynewscodeblast.b2clogin.com /… /v2.0/.хорошоизвестнаяOpenID-конфигурация’. HttpResponseMessage: ‘StatusCode: 404, ReasonPhrase: ‘Not Found’, версия: 1.1, Содержание: Возможно, я неправильно настроил свое приложение Azure — оно предельно простое, и TBH я не знаю, что я могу сделать неправильно, но это возможно. Вы не возражаете против регистрации приложения в Azure и проверки значения Не удается создать правильную конечную точку конфигурации OpenID Connect (v2)
2. Можете ли вы поделиться своим регистрационным манифестом приложения? Это JSON-файл, который вы можете загрузить с портала Azure. Это покажет, есть ли проблема с конфигурацией.
3. Пожалуйста, убедитесь, что вы включили неявный поток и выберите оба токена доступа и ID, как указано Rohit. Вы можете использовать этот документ для получения дополнительной информации: learn.microsoft.com/en-us/azure/active-directory-b2c /…