API 권한 부여 및 토큰 캐싱 이해

완료됨

회사 포털의 디자인에는 Microsoft Graph 로그인한 사용자의 프로필을 읽는 것이 포함됩니다. 인증은 포털에 대한 사용자를 식별하지만 API 호출에는 적절한 권한이 있는 액세스 토큰도 필요합니다.

이 단원에서는 사용 권한 유형, 범위 및 설명 MSAL4J 토큰 캐시 패턴을 설명합니다. 애플리케이션 또는 로그인 세션이 실행 중이라고 가정하지 않습니다.

API 권한 및 범위

보호된 API는 해당 기능 및 데이터에 대한 권한을 정의합니다. 예를 들어 Microsoft Graph 프로필을 읽고 일정을 읽고 메일을 보낼 수 있는 권한이 다릅니다. 애플리케이션은 의도한 작업에 필요한 권한만 요청합니다.

Microsoft Entra ID 다음 두 가지 사용 권한 유형을 지원합니다.

권한 유형 Context 동의
위임된 권한 애플리케이션은 로그인한 사용자를 대신하여 작동합니다. 액세스 권한은 부여된 권한 및 사용자의 액세스 권한에 의해 제한됩니다. 사용자 또는 권한 있는 관리자는 권한 및 테넌트 정책에 따라 동의를 부여할 수 있습니다.
애플리케이션 권한 애플리케이션은 백그라운드 서비스와 같이 로그인한 사용자 없이 자체적인 역할을 합니다. 관리자 동의가 필요합니다.

포털은 위임된 권한User.Read을 사용하여 로그인한 사용자의 프로필을 읽습니다. 이 권한은 모든 사용자의 데이터 또는 관련 없는 리소스(예: 일정)에 대한 액세스 권한을 부여하지 않습니다.

범위는 요청된 액세스를 설명합니다.

위임된 권한 부여 요청에서 OAuth 2.0 범위는 애플리케이션이 요청하는 권한을 표현합니다. 범위는 리소스와 사용 권한을 모두 식별할 수 있습니다. 예를 들어 Microsoft Graph https://graph.microsoft.com/Calendars.Read 대한 일정 읽기 권한을 요청합니다.

예제에서는 단일 범위를 User.Read사용합니다. Microsoft Graph 범위의 경우 리소스 식별자를 생략할 수 있으므로 이를 나타냅니다https://graph.microsoft.com/User.Read. 자세한 내용은 범위 및 사용 권한을 참조하세요.

구성된 API 권한, 요청된 범위 및 동의는 고유합니다. 앱 등록에 API 권한을 추가해도 자체에서 동의를 부여하거나 애플리케이션 코드에서 요청한 범위를 변경하지 않습니다.

액세스 토큰은 해당 API와 관련이 있습니다.

액세스 토큰은 특정 리소스를 위한 것입니다. Microsoft Graph 토큰은 다른 API의 토큰과 교환할 수 없으며 ID 토큰은 API 액세스 토큰을 대체하지 않습니다.

MSAL4J는 토큰을 획득하고 캐시합니다. 애플리케이션은 토큰을 구문 분석하여 로그인한 사용자의 ID를 가정하거나 재사용 가능한 권한 부여 코드로 처리하는 대신 의도한 리소스에 토큰을 사용합니다.

예시적인 무중단 토큰 획득

이후 요청의 경우 웹 애플리케이션은 다른 로그인 상호 작용을 통해 사용자를 보내지 않고 MSAL에 토큰을 요청할 수 있습니다. 다음 조각은 참조 샘플 AuthHelper에서 조정됩니다. 세션 관련 캐시를 복원하고 해당 컨텍스트에 이미 표시된 계정에 대한 토큰을 요청하는 방법을 보여 줍니다.

final SilentParameters parameters = SilentParameters
                                        .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                        .build();

final ConfidentialClientApplication client = getConfidentialClientInstance();
client.tokenCache().deserialize(context.getTokenCache());

final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();

SilentParameters 는 요청된 범위 및 계정을 식별합니다. 이 샘플에서는 Config.SCOPES에 context이(가) 포함되어 있으며, User.Read는 인증된 세션에 연결된 계정 및 직렬화된 캐시를 제공합니다. 학습자가 가져와야 하는 값이 아니라 샘플 애플리케이션 도우미입니다.

캐시가 복원된 acquireTokenSilently 후 사용자 상호 작용 없이 요청을 충족하려고 시도합니다. 사용 가능한 캐시된 액세스 토큰을 반환하거나 해당하는 경우 캐시된 새로 고침 토큰을 사용할 수 있습니다. "사일런트"가 반드시 네트워크 요청이 발생하지 않는다는 뜻은 아닙니다.

이 조각은 주변 캐시 지속성 및 예외 처리를 생략합니다. MSAL이 사용자 상호 작용이 필요하다고 표시되면 웹 애플리케이션은 새 권한 부여 요청을 시작하고 결과 콜백을 처리합니다. 이전 권한 부여 코드를 다시 사용하지 않습니다. 네트워크 또는 구성 오류와 같은 다른 오류는 무조건 로그인 루프가 아닌 적절한 오류 처리가 필요합니다.

토큰 캐시 및 세션 데이터에는 중요한 정보가 포함됩니다. 전체 애플리케이션은 해당 데이터를 보호하고, 올바른 계정 및 세션과 연결하고, 캐시 변경 내용을 적절하게 유지해야 합니다.

API 호출 전에 결과 해석

토큰을 성공적으로 획득하면 액세스 토큰과 해당 유효 기간 및 계정 컨텍스트에 대한 정보가 포함된 IAuthenticationResult이(가) 생성됩니다. Microsoft Graph 요청의 경우 애플리케이션은 Graph 액세스 토큰을 HTTP 클라이언트 또는 그래프 인증 공급자에게 제공합니다.

MSAL4J는 단순히 해당 토큰을 획득하여 사용자의 프로필을 읽지 않습니다. 별도의 API 요청은 데이터 작업을 수행합니다.

Microsoft Graph 리소스를 제공합니다.

Microsoft Graph 통해 Microsoft 클라우드 데이터 및 서비스를 노출합니다https://graph.microsoft.com. 엔드포인트는 /v1.0/me 로그인한 사용자를 나타내며 위임된 사용자 컨텍스트가 필요합니다.

다음 단원에서는 Java Graph SDK를 통해 해당 엔드포인트에 대한 설명 요청 및 해당 요청을 검사합니다. Microsoft Graph 개요는 광범위한 API에 대해 설명합니다.