Для проекта у меня есть настройка Azure B2C. При входе через экран входа в систему, как, например, с помощью приведенного ниже URL-адреса, я получаю обратно пользовательское требование под названием «myID».
URL-адрес с именем входа: https://login.microsoftonline.com/myapp.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_MyApp_SignIn&client_id=aaaa-bbbb-cccc-dddd-eeee&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms%2F&scope=openid&response_type=id_token&prompt=login
Пользовательская политика B2C, которую я использую, вызывает REST API, который возвращает утверждение «myID». Это все работает нормально.
Однако, если после входа я попытаюсь снова получить токен B2C с помощью вызова, подобного этому: https://login.microsoftonline.com/myapp.onmicrosoft.com/oauth2/v2.0/authorize?p=b2c_1a_MyApp_signin&redirect_uri=https%3A%2F%2Fjwt.ms%2F&response_type=id_token&client_id=aaaa-bbbb-cccc-dddd-eeee&state=CUSTOMQSEGFu8EIzjB-yOqiSlue5Khsvns0ohQmy_state&nonce=sGQAXiotX9mpdJJ56ppkU5-9FXP4DBle&scope=openid
Я не вижу пользовательскую заявку "myID "больше.
Я подозреваю, что это потому, что второй вызов, который не показывает экран входа в систему, не вызывает REST API для получения пользовательского утверждения. Однако мне действительно нужно заказное требование.
Кто-нибудь знает, как обеспечить запуск моего REST API, даже если я не использую экран входа в систему?
Фрагмент из политики входа в систему:
<RelyingParty>
<DefaultUserJourney ReferenceId="SignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="myID" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="idp_access_token" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
Фрагмент из файла расширений платформы:
<TechnicalProfile Id="REST-API-SignIn">
<DisplayName>Validate user's input data and return loyaltyNumber claim</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://myApp.azurewebsites.net/api/Claims/SignIn</Item>
<Item Key="AllowInsecureAuthInProduction">true</Item>
<Item Key="AuthenticationType">None</Item>
<Item Key="SendClaimsIn">Body</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="signInName" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="myID" PartnerClaimType="myID" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
</OutputClaims>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
Фрагмент поездки пользователя из файла TrustFrameworkBase:
<UserJourney Id="SignIn">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
<ClaimsProviderSelections>
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" />
</ClaimsExchanges>
</OrchestrationStep>
<!-- This step reads any user attributes that we may not have received when in the token. -->
<OrchestrationStep Order="2" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
<ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>