Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Najemcy Workforce
Zewnętrzni najemcy (dowiedz się więcej)
Po zalogowaniu użytkownika i odebraniu tokenów aplikacja Microsoft Authentication Library (MSAL) uwidacznia informacje o użytkowniku, środowisku użytkownika i wystawionych tokenach. Aplikacja może używać tych wartości do wywoływania internetowego interfejsu API lub wyświetlania użytkownikowi komunikatu powitalnego.
W tym artykule najpierw przyjrzymy się wynikowi MSAL. Następnie przyjrzymy się, jak użyć tokenu dostępu z AuthenticationResult
lub result
do wywołania chronionego interfejsu API w sieci.
Wynik MSAL
Biblioteka MSAL oferuje następujące wartości:
-
AccessToken
wywołuje chronione interfejsy API w żądaniu HTTP z tokenem dostępu. -
IdToken
Zawiera przydatne informacje o zalogowanym użytkowniku. Te informacje obejmują nazwę użytkownika, głównego najemcę i unikatowy identyfikator przechowywania. -
ExpiresOn
to czas wygaśnięcia tokenu. MSAL obsługuje automatyczne odświeżanie aplikacji. -
TenantId
to identyfikator dzierżawcy, w którym użytkownik się zalogował. W przypadku użytkowników-gości w usłudze Microsoft Entra B2B ta wartość identyfikuje dzierżawcę, w którym zalogował się użytkownik. Wartość nie identyfikuje głównego najemcy użytkownika. -
Scopes
wskazuje zakresy, które zostały przyznane z twoim tokenem. Przyznane zakresy mogą być podzbiorem żądanych zakresów.
Biblioteka MSAL zapewnia również abstrakcję dla Account
wartości. Wartość Account
reprezentuje konto zalogowanego bieżącego użytkownika:
-
HomeAccountIdentifier
identyfikuje dzierżawę główną użytkownika. -
UserName
to preferowana nazwa użytkownika. Ta wartość może być pusta dla użytkowników usługi Azure AD B2C. -
AccountIdentifier
identyfikuje zalogowanych użytkowników. W większości przypadków ta wartość odpowiadaHomeAccountIdentifier
, chyba że użytkownik jest gościem w innej dzierżawie.
Wywoływanie interfejsu API
Po utworzeniu tokenu dostępu możesz wywołać internetowy interfejs API. Aplikacja użyje tokenu do skompilowania żądania HTTP, a następnie uruchomi żądanie.
Android
RequestQueue queue = Volley.newRequestQueue(this);
JSONObject parameters = new JSONObject();
try {
parameters.put("key", "value");
} catch (Exception e) {
// Error when constructing.
}
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, MSGRAPH_URL,
parameters,new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// Successfully called Graph. Process data and send to UI.
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Error.
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
// Put access token in HTTP request.
headers.put("Authorization", "Bearer " + authResult.getAccessToken());
return headers;
}
};
request.setRetryPolicy(new DefaultRetryPolicy(
3000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(request);
Biblioteka MSAL dla systemów iOS i macOS
Metody uzyskiwania tokenów zwracają obiekt typu MSALResult
.
MSALResult
udostępnia właściwość accessToken
. Możesz użyć accessToken
do wywołania API internetowego. Dodaj tę właściwość do nagłówka autoryzacji HTTP przed wywołaniem, aby uzyskać dostęp do chronionego interfejsu API sieciowego.
NSMutableURLRequest *urlRequest = [NSMutableURLRequest new];
urlRequest.URL = [NSURL URLWithString:"https://contoso.api.com"];
urlRequest.HTTPMethod = @"GET";
urlRequest.allHTTPHeaderFields = @{ @"Authorization" : [NSString stringWithFormat:@"Bearer %@", accessToken] };
NSURLSessionDataTask *task =
[[NSURLSession sharedSession] dataTaskWithRequest:urlRequest
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {}];
[task resume];
let urlRequest = NSMutableURLRequest()
urlRequest.url = URL(string: "https://contoso.api.com")!
urlRequest.httpMethod = "GET"
urlRequest.allHTTPHeaderFields = [ "Authorization" : "Bearer \(accessToken)" ]
let task = URLSession.shared.dataTask(with: urlRequest as URLRequest) { (data: Data?, response: URLResponse?, error: Error?) in }
task.resume()
Wykonaj kilka żądań interfejsu API
Aby wywołać ten sam interfejs API kilka razy lub wywołać wiele interfejsów API, rozważ następujące tematy podczas kompilowania aplikacji:
Zgoda przyrostowa: Platforma tożsamości Microsoft umożliwia aplikacjom uzyskanie zgody użytkownika, gdy uprawnienia są wymagane, a nie wszystkie na początku. Za każdym razem, gdy aplikacja jest gotowa do wywołania interfejsu API, powinna zażądać tylko wymaganych zakresów.
Dostęp warunkowy: W przypadku wykonywania kilku żądań interfejsu API w niektórych scenariuszach może być konieczne spełnienie dodatkowych wymagań dotyczących dostępu warunkowego. Wymagania mogą wzrosnąć w ten sposób, jeśli pierwsze żądanie nie ma zasad dostępu warunkowego, a aplikacja próbuje dyskretnie uzyskać dostęp do nowego interfejsu API wymagającego dostępu warunkowego. Aby rozwiązać ten problem, pamiętaj, aby wyłapać błędy pochodzące z dyskretnych żądań i przygotować się do wykonania interakcyjnego żądania. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące dostępu warunkowego.
Wywoływanie kilku interfejsów API przy użyciu zgody przyrostowej i dostępu warunkowego
Aby wywołać kilka interfejsów API dla tego samego użytkownika, po uzyskaniu tokenu dla użytkownika można uniknąć wielokrotnego monitowania o poświadczenia, wywołując następnie AcquireTokenSilent
w celu uzyskania tokenu:
var result = await app.AcquireTokenXX("scopeApi1")
.ExecuteAsync();
result = await app.AcquireTokenSilent("scopeApi2")
.ExecuteAsync();
Interakcja jest wymagana, gdy:
- Użytkownik wyraził zgodę na pierwszy interfejs API, ale teraz musi wyrazić zgodę na więcej zakresów. W takim przypadku należy użyć zgody przyrostowej.
- Pierwszy interfejs API nie wymaga uwierzytelniania wieloskładnikowego, ale następny już tak.
var result = await app.AcquireTokenXX("scopeApi1")
.ExecuteAsync();
try
{
result = await app.AcquireTokenSilent("scopeApi2")
.ExecuteAsync();
}
catch(MsalUiRequiredException ex)
{
result = await app.AcquireTokenInteractive("scopeApi2")
.WithClaims(ex.Claims)
.ExecuteAsync();
}
Następne kroki
Dowiedz się więcej, budując aplikację jednostronicową React (SPA), która loguje użytkowników w następującej serii wieloczęściowych samouczków.
Odkrywaj przykłady kodu mobilnego na Platformie tożsamości Microsoft