Я реализовал то, что описано здесь: Регистрация с приглашением по электронной почте
Это работает безупречно, когда служба приложений Azure использует B2C Azure AD для аутентификации \ входа в систему, то есть приглашение e- электронная почта отправляется, когда я вошел в систему через учетную запись, аутентифицированную в B2C AD.
Теперь у меня есть другая служба приложений, указывающая на B2B Azure AD для входа пользователя в систему \ аутентификации, и поэтому электронное письмо с приглашением отправленоотправлено, когда я вошел в систему через учетную запись, аутентифицированную в AD B2B.
Письмо с ссылкой для приглашения, которая указывает на B2C AD, отправлено правильно.Однако после нажатия на ссылку политика приглашений на регистрацию B2C начинает действовать, и у меня появляется ошибка 401 (не авторизована).Похоже, что политика B2C не может получить доступ к конечной точке метаданных, установленной в конфигах политики, по любой причине ...
Отображаемое сообщение:
Идентификатор корреляции: 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 .
Возможно, проблема в эмитенте ... Я пытаюсь что-то здесь, но пока ничего не работает.Поэтому я решил задать этот вопрос.Я надеюсь, что кто-то может пролить свет.