Ich richte GitHub als benutzerdefinierten Anbieter in Azure AD B2C mit benutzerdefinierten Richtlinien ein. Ich bin in der Lage, auf die Anmeldeseite zu gelangen und erfolgreich zum korrekten Azure-Anzeigenlink weiterzuleiten, aber ein Serverfehler in Azure AD B2C weist den zweiten Teil von OAUTH immer zurück.Azure AD B2C - Benutzerdefinierter Provider für GitHub kann nicht auf Token zugreifen
Wenn ich die Trace-Logs der App insights ansehe, wird die Meldung "Eine ungültige OAuth-Antwort wurde empfangen" und "Unerwartetes Zeichen beim Parsen des Werts: a" gefunden. Hier ist die Politik Provider I ein:
<ClaimsProvider>
<Domain>github.com</Domain>
<DisplayName>GitHub</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="GitHub-OAUTH">
<DisplayName>GitHub</DisplayName>
<Protocol Name="OAuth2" />
<Metadata>
<Item Key="ProviderName">github</Item>
<Item Key="authorization_endpoint">https://github.com/login/oauth/authorize</Item>
<Item Key="AccessTokenEndpoint">https://github.com/login/oauth/access_token?</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="ClaimsEndpoint">https://api.github.com/user</Item>
<Item Key="client_id">My Client Id</Item>
<Item Key="UsePolicyInRedirectUri">0</Item>
<Item Key="scope">user</Item>
<Item Key="response_types">code</Item>
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_GitHubSecret" />
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="socialIdpUserId" PartnerClaimType="id" />
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" />
<OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="github.com" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Ich frage mich, ob das Problem ist, dass der access_token nicht in einem json zurückgegeben wird? Ich trat durch alle Schritte selbst in Postbote und der Code wurde als URL-Parameter zurückgegeben, und die access_token wurde in den Körper der Antwort wie folgt zurückgegeben:
access_token=<snip>&scope=user%3Aemail&token_type=bearer
Bin ich ein Metadatenelement fehlt in der benutzerdefinierter Anbieter zur Unterstützung dieser Antwort? Oder funktioniert das einfach nicht in Azure AD B2C?
Chris, danke für die Antwort! Ich kann in App-Insights sehen, dass die Anspruchsantwort von GitHub zurückkommt, aber es gibt immer noch einen internen Serverfehler während der ValidateApiResponseHandler-Phase (und geht dann zu NoOpHandler, bevor der Fehler zurückgegeben wird): "Ein selbstgewählter Sendevorgang Antwort ist fehlgeschlagen mit Grund 'Interner Serverfehler'. " Ich legte den ursprünglichen Richtliniennamen in das Feld UserAgentForClaimsExchange: CPIM-Basic//B2C_1A_signup_signin. Ist das die richtige Richtlinie? –
Was bedeutet UserAgentForClaimsExchange? –
Sie sollten keine der {mandator} - oder {policy} -Token ersetzen. Die Azure AD B2C-Engine ersetzt sie. –