Uzyskiwanie i używanie tokenu dostępu

Przed uzyskaniem tokenu dostępu upewnij się, że wiesz, jak zainicjować obiekt aplikacji. Ważne jest również zrozumienie relacji między tokenami dostępu i zasobami.

W bibliotece MSAL możesz uzyskać tokeny dostępu dla interfejsów API, które aplikacja musi wywołać przy użyciu acquireToken* metod udostępnianych przez bibliotekę. Metody acquireToken* wyodrębniają 2 kroki związane z uzyskiwaniem tokenów przy użyciu przepływu kodu autoryzacji OAuth 2.0:

  1. prześlij wniosek o Microsoft Entra ID w celu uzyskaniaauthorization code
  2. wymiana tego kodu dla tokenu dostępu zawierającego zakresy, na które użytkownik wyraził zgodę

Uzyskiwanie tokenu dostępu

Wybieranie typu interakcji

Zobacz tutaj , jeśli nie masz pewności co do różnic między acquireTokenRedirect i acquireTokenPopup.

Przygotowywanie obiektu żądania

Musisz przekazać obiekt żądania do interfejsów API acquireToken*. Ten obiekt umożliwia używanie różnych parametrów w żądaniu. Zobacz tutaj , aby uzyskać więcej informacji na temat parametrów obiektu żądania. Zakresy są wymagane we wszystkich wywołaniach acquireToken*.

Sprawdź pamięć podręczną

Biblioteka MSAL używa pamięci podręcznej do przechowywania tokenów na podstawie określonych parametrów, w tym zakresów, zasobów i urzędu, i pobiera token z pamięci podręcznej w razie potrzeby. Może również przeprowadzić dyskretne odnawianie tych tokenów po wygaśnięciu. Biblioteka MSAL udostępnia tę funkcję za pomocą metody acquireTokenSilent.

Po zalogowaniu się za pomocą interfejsu API ssoSilent lub login* pamięć podręczna będzie zawierać zestaw tokenów identyfikacyjnych, dostępu i odświeżania. Za każdym razem, gdy potrzebujesz tokenu dostępu, wywołaj acquireTokenSilent, a jeśli to się nie powiedzie, zamiast tego wywołaj interakcyjny interfejs API. acquireTokenSilent Będzie szukać prawidłowego tokenu w pamięci podręcznej, a jeśli zbliża się do wygaśnięcia lub nie istnieje, automatycznie spróbuje odświeżyć go za pomocą buforowanego tokenu odświeżania. Więcej na temat korzystania z acquireTokenSilentmożesz przeczytać tutaj.

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(async (error) => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenPopup(request);
    }

    // handle other errors
})

Redirect

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(error => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenRedirect(request)
    }

    // handle other errors
});

Korzystanie z tokenu dostępu

Po pobraniu tokenu dostępu należy dołączyć go w nagłówku Authorization jako token okaziciela w żądaniu do zasobu, dla którego uzyskano token, jak pokazano poniżej:

var headers = new Headers();
var bearer = "Bearer " + tokenResponse.accessToken;
headers.append("Authorization", bearer);
var options = {
        method: "GET",
        headers: headers
};
var graphEndpoint = "https://graph.microsoft.com/v1.0/me";

fetch(graphEndpoint, options)
    .then(resp => {
        //do something with response
    });

Najlepsze praktyki dotyczące uzyskiwania tokenów MSAL

Poniżej przedstawiono najlepsze praktyki dotyczące pozyskiwania tokenów za pomocą biblioteki MSAL, aby uniknąć błędów, spadków wydajności i problemów z użytecznością. Niektóre scenariusze mogą zawierać wyjątki od tych.

Używanie pojedynczego wystąpienia PublicClientApplication

Utwórz jedną instancję PublicClientApplication dla każdej aplikacji i używaj tej samej instancji w całej aplikacji. Zapewnia to jedno wiarygodne źródło informacji o tym, jakie operacje wykonuje MSAL w danym momencie (zobacz: zdarzenia MSAL), oraz eliminuje ryzyko, że różne obiekty aplikacji będą wysyłać równoległe żądania interaktywne lub że wystąpią potencjalne konflikty pamięci podręcznej, co mogłoby zakłócić działanie aplikacji, obniżyć wydajność lub pogorszyć komfort użytkowania.

Zawsze czekaj na obietnice, aby rozwiązać problem

Wszystkie interfejsy API MSAL acquireToken*, a także interfejsy API login*, wykonują operacje asynchroniczne i zwracają obiekty Promise. Przed wykonaniem innych zadań zależnych od stanu uwierzytelniania lub tokenów, takich jak renderowanie informacji o użytkowniku, wywoływanie chronionego interfejsu API lub wywoływanie innych interfejsów API biblioteki MSAL, należy zawsze czekać na rozwiązanie tych obietnic.

Najpierw spróbuj wykonać żądanie dyskretne, a następnie interakcyjne

Podczas żądania tokenów zawsze najpierw używaj acquireTokenSilent, w razie potrzeby przechodząc na interakcyjne pozyskiwanie tokenu (np. gdy zostanie zgłoszony wyjątek InteractionRequiredAuthError).

Współbieżne żądania dyskretne są dozwolone. Jeśli co najmniej dwa żądania dyskretne są wykonywane współbieżnie, tylko jedna z nich przejdzie do sieci (w razie potrzeby), ale wszystkie otrzymają odpowiedź, o ile te żądania dotyczą tych samych parametrów żądania (np. zakresów).

Współbieżne żądania interakcyjne nie są dozwolone. Jeśli co najmniej dwa żądania interakcyjne są wykonywane współbieżnie, tylko pierwszy z nich rozpocznie interakcję, podczas gdy reszta zakończy się niepowodzeniem z powodu błędu interaction_in_progress . Zalecamy zapoznanie się z tym błędem i możliwymi środkami zaradczymi, aby uniknąć jego wystąpienia w aplikacjach.

Wysyłaj jedno żądanie tokenu dla każdego zasobu

Tokeny dostępu można żądać tylko dla jednego zasobu jednocześnie (zobacz zasoby i zakresy). W razie potrzeby możesz poprosić użytkownika o wyrażenie zgody na zakresy (uprawnienia) wymagane przez więcej niż jeden zasób przy użyciu parametru extraScopesToConsent w obiekcie żądania. Tokeny dostępu dla wcześniej wyrażonych zgody zakresów można uzyskać w trybie dyskretnym.

Dalsze kroki