Не удается создать правильную конечную точку конфигурации OpenID Connect (v2)

#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 /…

Ответ №2:

Я просмотрел файл манифеста вашего приложения и обнаружил, что вы не включили неявный поток. Пожалуйста, выберите приложение и перейдите к аутентификации и выберите токены идентификатора и токены доступа.

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

Я попробовал образец, предоставленный @Razi, и он отлично работает от начала до конца.