Używam OWIN OpenID Connect Middleware dopołączyć się z usługą Azure AD. Jestem w stanie pomyślnie uwierzytelnić użytkownika i przekierować z powrotem do punktu końcowego oddzwaniania. Jestem trochę zdezorientowany, ponieważ otrzymuję tylko id_token
& code
w odpowiedzi.
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
AuthenticationType = "Azure AD - TEST",
Caption = "azure AD",
SignInAsAuthenticationType = signInAsType,
ClientId = "some guid",
Authority = "https://sts.windows.net/idp",
ResponseType = OpenIdConnectResponseTypes.CodeIdToken,
RedirectUri = "https://localhost:44392/ExternalLogins/Callback/",
AuthenticationMode = AuthenticationMode.Active,
});
Metoda oddzwaniania:
[HttpPost]
[Route("ExternalLogins/Callback")]
[AllowAnonymous]
public async Task<IHttpActionResult> ExternalLoginCallback()
{
var content = await Request.Content.ReadAsStringAsync();
// I could see the content is a string with id_token, code , state etc.
//id_token is a JWT, so i can decode it and see the user claims and use them later
}
Moje pytania to:
- Czy usługa Azure AD służy tylko do uwierzytelniania użytkownika? Co z autoryzacją?
- Jeśli chcę nawiązywać połączenia z innymi interfejsami API po uwierzytelnieniu, jak to zrobić, ponieważ nie mam
access_token
? - Myślę, że mogę wymienić
code
zaccess_token
ale nie jestem pewien, który punkt końcowy platformy Azure muszę zadzwonić, aby uzyskaćaccess_token
? - Jaka jest różnica pomiędzy
AuthenticationMode.Active
iAuthenticationMode.Passive
?
Odpowiedzi:
0 dla odpowiedzi № 1- Usługa Azure AD może absolutnie autoryzować użytkownika i uzyskać tokeny dostępu / odświeżania. Obsługuje wszystkie przepływy oAuth 2.0 i OIDC.
- Musisz zdobyć
access token
nawiązywać połączenia z interfejsem API. Powiedzmy, że chcesz wywołać punkt końcowy / get na MS Graph, będziesz go wypełniałaccess token
w treści żądania http ze słowem kluczowymBearer ey...
Przed tym. Ponadto musisz przejść do portalu Azure i skonfigurować delegowane uprawnienia, do których chcesz uzyskać dostęp. - Kod autoryzacyjny służy do wymiany na token_dostępu. Proponuję sprawdzić ten protokół doc pokazuje, jak korzystać ze wszystkich punktów końcowych. Krótka odpowiedź brzmi: POST do punktu końcowego / token.
- Różnica między aktywną a pasywną jest nieco złożona dla odpowiedzi SO, polecam lekturę ten wpis na blogu o różnicach.
Dodam tylko, że jeśli chcesz zobaczyć przykładowy kod za pomocą usługi Azure AD, możesz przejść do Przewodnik po usłudze Azure AD Dev lub Przykłady kodu usługi Azure AD na Github.