Пользовательская политика приглашения Azure AD B2C для регистрации возвращает 401 при попытке достичь конечной точки метаданных - PullRequest
0 голосов
/ 20 сентября 2019

Я реализовал то, что описано здесь: Регистрация с приглашением по электронной почте

Это работает безупречно, когда служба приложений Azure использует B2C Azure AD для аутентификации \ входа в систему, то есть приглашение e- электронная почта отправляется, когда я вошел в систему через учетную запись, аутентифицированную в B2C AD.

Теперь у меня есть другая служба приложений, указывающая на B2B Azure AD для входа пользователя в систему \ аутентификации, и поэтому электронное письмо с приглашением отправленоотправлено, когда я вошел в систему через учетную запись, аутентифицированную в AD B2B.

Письмо с ссылкой для приглашения, которая указывает на B2C AD, отправлено правильно.Однако после нажатия на ссылку политика приглашений на регистрацию B2C начинает действовать, и у меня появляется ошибка 401 (не авторизована).Похоже, что политика B2C не может получить доступ к конечной точке метаданных, установленной в конфигах политики, по любой причине ...

enter image description here

Отображаемое сообщение:

Идентификатор корреляции: 78292d04-7184-42d0-ac2d-a60bb98a532f
Метка времени: 2019-09-20 16: 19: 25Z AADB2C: конечная точка метаданных
'https://mywebsite.azurewebsites.net/.well-known/openid-configuration'
вернул следующий код состояния: '401'

Это пользовательская политика приглашения на регистрацию <ClaimsProvider>, в которой указана конечная точка метаданных :

<!--This technical profile specifies how B2C should validate the token, and what claims you want B2C to extract from the token. 
  The METADATA value in the TechnicalProfile meta-data is required. 
  The “IdTokenAudience” and “issuer” arguments are optional (see later section)-->
<ClaimsProvider>
  <DisplayName>ID Token Hint ClaimsProvider</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="IdTokenHint_ExtractClaims">
      <DisplayName>ID Token Hint TechnicalProfile</DisplayName>
      <Protocol Name="None" />
      <Metadata>

        <!-- Action required: replace with endpoint location -->
        <Item Key="METADATA">https://mywebsite.azurewebsites.net/.well-known/openid-configuration</Item>

        <!-- <Item Key="IdTokenAudience">your_optional_audience_override</Item> -->
        <!-- <Item Key="issuer">your_optional_issuer</Item> -->
      </Metadata>
      <OutputClaims>
        <!--Read the email claim from the id_token_hint-->
        <OutputClaim ClaimTypeReferenceId="email" />
        <OutputClaim ClaimTypeReferenceId="shardTenantId"/>
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Мой вопрос: почему этот 401 (несанкционированный) выбрасывается?Когда я пытаюсь получить доступ к конечной точке метаданных: https://mywebsite.azurewebsites.net/.well-known/openid-configuration он открывается очень хорошо и возвращает требуемый json вывод:

{
    issuer: "https://mywebsite.azurewebsites.net/",
    jwks_uri: "https://mywebsite.azurewebsites.net/.well-known/keys",
    id_token_signing_alg_values_supported: [
        "RS256"
        ]
}

Это метод веб-API, который выводит json, описанный выше:

[AllowAnonymous]
[Route(".well-known/openid-configuration", Name = "OIDCMetadata")]
[HttpGet]
public HttpResponseMessage Metadata()
{
    var json = JsonConvert.SerializeObject(new OidcModel
    {
        // The issuer name is the application root path
        Issuer = InvitationHelper.GetBaseUrl(),

        // Include the absolute URL to JWKs endpoint
        JwksUri = Url.Link("JWKS", null),

    // Sample: Include the supported signing algorithms
    IdTokenSigningAlgValuesSupported = new[] { SigningCredentials.Value.Algorithm }
    });

    var response = Request.CreateResponse(HttpStatusCode.OK);

    response.Content = new StringContent(json, Encoding.UTF8, "application/json");

    return response;
}

Я даже пытался добавить [AllowAnonymous] аннотацию к методу API, но это не внесло никаких изменений.

Почему не может настраиваемая политика приглашения на регистрациюполучить доступ к конечной точке метаданных, которая находится в службе приложения, размещенной на другом клиенте B2B AD?

ПРИМЕЧАНИЕ 1. добавил инструментарий Application Insights к этой пользовательской политике, и единственное сообщение, которое я увидел, было FatalИсключение 401 без дополнительной ценной информации:

{"Kind": "FatalException", "Content": {"Time": "16:15 PM", "Exception":
{"Kind": "Handled", "HResult": "80131500", "Message": "Конечная точка метаданных

'https://mywebsite.azurewebsites.net/.well-known/openid-configuration'
вернула следующий код состояния:
' 401 '", "Данные":
{"IsPolicySpecificError": false, "uri": "https://mywebsite.azurewebsites.net/.well-known/openid-configuration"}​}}​}

ПРИМЕЧАНИЕ 2: есливы посмотрите на <ClaimsProvider> выше, есть эти 2 настройки:

<!-- <Item Key="IdTokenAudience">your_optional_audience_override</Item> -->
<!-- <Item Key="issuer">your_optional_issuer</Item> -->

Я не уверен, как использовать эти 2 другие настройки, поскольку они не были описаны в doc @ GitHub .

Возможно, проблема в эмитенте ... Я пытаюсь что-то здесь, но пока ничего не работает.Поэтому я решил задать этот вопрос.Я надеюсь, что кто-то может пролить свет.

1 Ответ

0 голосов
/ 20 сентября 2019

Я связался с Джас Сури через LinkedIn.Он - парень, который сделал последний коммит в этом репозитории GitHub.

Он спросил меня о реальной конечной точке метаданных (я разместил здесь фиктивный URL).

Когда он пытался получить доступчто URL ему предложили войти ... что ?!Авторизоваться!?Ага.Это ответило на вопрос.У меня есть SSO на моей коробке разработчика, и поэтому я не понял этого ... но подождите: у меня была [AllowAnonymous] аннотация в этом методе веб-API, верно?Так почему же он все еще запрашивает логин!?

Он быстро спросил меня, включил ли я Аутентификацию на уровне сервиса приложения ... Я зашел на Портал Azure и проверил сервис приложения Authorization/Authentication настроек.Угадайте, что ... Я включил его, но проблема была не в этом.См. Выделенный параметр ниже:

enter image description here

Мы можем оставить его включенным, но реальная проблема заключалась в том, что некоторое время назад я установил

Действие, которое необходимо выполнить, когда запрос не аутентифицирован
Войдите в систему Azure Active Directory

, которая переопределяет аннотацию [AllowAnonymous], размещенную в методе веб-API.

Как только я выбрал в раскрывающемся списке:

Разрешить анонимные запросы (без действий)

и сохранить, политика B2C начала работать какожидается.

Анонимный доступ включен в приложении Служба приложений.Пользователям не будет предложено войти в систему.

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