Udostępnij za pośrednictwem


Wywoływanie internetowego interfejsu API z aplikacji mobilnej

Dotyczy: Zielony okrąg z białym symbolem zaznaczenia. Najemcy Workforce Biały okrąg z szarym symbolem X. 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ść odpowiada HomeAccountIdentifier, 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.

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