Android에서 Microsoft Edge용 SPNEGO Authenticator 작성
타사에서는 Android용 Microsoft Edge에서 SPNEGO 인증을 사용하도록 설정할 수 있습니다. 이 인증을 제공하려면 SPNEGO 인증자를 제공해야 합니다. 이 문서에서는 Edge와 SPNEGO Authenticator 간의 인터페이스에 대해 설명합니다.
소개
SPNEGO 인증자는 Android 서비스에서 제공합니다. 인증자는 사용자의 디바이스에 설치된 타사에서 제공하는 앱에 통합되어야 합니다. 앱은 SPNEGO 인증에 사용되는 모든 계정 및 SPNEGO 서버와의 모든 통신을 관리합니다.
SPNEGO Authenticator는 Android AccountAuthenticator입니다. 따라서 AbstractAccountAuthenticator에 설명된 패턴을 따라야 합니다. 에서 AbstractAccountAuthenticator
파생된 인증자 클래스를 구현해야 합니다.
SPNEGO Authenticator는 새 계정 유형을 정의해야 합니다. 계정 유형 이름은 기록기 도메인 이름(예: com.example.spnego)에서 파생되어야 합니다. customToken을 사용하도록 계정 유형을 정의해야 하며 "SPNEGO" 기능(HttpNegotiateConstants.SPNEGO_FEATURE)을 지원해야 합니다.
Microsoft Edge에 대한 인터페이스
Edge는 제공하는 Android 계정 유형을 통해 SPNEGO 인증자를 찾습니다. 인증자가 정의한 계정 유형은 AuthAndroidNegotiateAccountType 정책을 통해 Edge로 전달됩니다.
Edge에 대한 인터페이스는 특히 AbstractAccountManager.getAuthToken을 통해 Android 계정 관리 프레임워크를 통해 제공됩니다.
Edge의 org.chromium.net.HttpNegotiateConstants는 에 대한 인수 getAuthToken
및 반환된 결과 번들에 사용되는 몇 가지 더 많은 키와 값을 정의합니다.
getAuthToken 인수
getAuthToken이 호출 authTokenType
되면 는 "SPNEGO:HOSTBASED:<spn>"입니다. 여기서 <spn>은 요청의 보안 주체입니다. 현재 구현에서 항상 호스트 기반 보안 주체가 됩니다. 이후 버전에서는 다른 유형의 보안 주체를 허용할 수 있지만 그렇게 하는 경우 다른 접두사를 사용합니다. SPNEGO 인증자는 접두사를 검사 합니다.
번들에는 options
다음 키가 포함됩니다.
- KEY_CALLER_PID
- KEY_CALLER_UID
-
HttpNegotiateConstants.KEY_CAN_DELEGATE
- 위임이 허용되면 True이고, 허용되지 않으면 false입니다.
다라운드 인증 시퀀스의 두 번째 또는 이후 라운드인 경우 다음 키도 포함됩니다.
-
HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN
- WWW-Authenticate 헤더 Base64로 인코딩된 들어오는 토큰입니다. -
HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
- 이전 라운드의 인증자가 제공한 SPNEGO 컨텍스트입니다. Microsoft Edge는 이 번들을 불투명 개체로 취급하고 라운드 사이에 유지합니다.
getAuthToken 결과 번들
getAuthToken의 최종 결과 번들(의 반환 값getAuthToken
으로 반환되거나 AccountAuthenticatorResponse을 통해 반환됨)에는 Android 설명서에 정의된 계정 이름, 계정 유형 및 토큰이 포함되어야 합니다. 또한 번들에는 다음 키가 포함되어야 합니다.
-
HttpNegotiateConstants.KEY_SPNEGO_RESULT
- SPNEGO 결과 코드입니다. HttpNegotiateConstants에 정의된 값 중 하나여야 합니다. -
HttpNegotiateConstants.KEY_SPNEGO_CONTEXT
- 다음 인증 라운드에서 인증자에 반환될 컨텍스트입니다. 이는 인증이 불완전한 경우에만 필요합니다.
구현 권장 사항
SPNEGO 인증자를 구현할 때 다음 권장 사항을 고려해야 합니다.
SPNEGO 계정 인증자가 제공하는 각 계정은 단일 키 배포 센터에서 제공하는 단일 사용자 계정(계정)에 해당해야 합니다.
계정 인증자는 암호를 저장해서는 안 됩니다. 대신 사용자 보안 주체에 대한 TGT를 저장하고 TGT가 만료되면 사용자가 암호(또는 기타 인증 데이터)를 다시 입력하도록 요구해야 합니다.
계정 인증자는 각 계정에 대해 승인된 애플리케이션(또는 애플리케이션 서명) 목록을 유지하고 다른 애플리케이션에 서비스 토큰 제공을 거부해야 합니다. 권한 있는 애플리케이션 목록은 다음과 같습니다.
- 계정 인증자에 기본 제공
- 시스템 관리자가 구성할 수 있습니다.
- 사용자가 구성할 수 있습니다. 이 경우 계정 인증자는 사용자가 처음 액세스를 요청할 때 새 애플리케이션에 동적으로 권한을 부여하도록 선택할 수 있습니다.
인증자는 옵션 번들의 KEY_CALLER_UID 필드를 사용하여 호출 앱의 uid를 가져와서 또는 유사한 호출을 사용하여
context.getPackageManager().getNameForUid()
요청 애플리케이션을 식별할 수 있습니다.이는 사용자가 실행하는 악성 앱이 의도하지 않은 방식으로 서비스에 액세스하기 위해 사용자의 자격 증명을 사용할 수 없도록 하는 데 필요합니다. 이는 앞에서 설명한 대로 사용자 지정 토큰 옵션을 사용하면 인증 토큰을 받을 때 Android의 자체 서명 검사 사용하지 않도록 설정하기 때문에 중요합니다.
계정 인증자에 기본 제공되는 경우가 아니면 시스템 관리자 또는 사용자가 키 배포 센터의 위치를 구성할 수 있어야 합니다.
Microsoft Edge에 표시되는 오류 코드
인증자 앱에서 전달할 수 있는 오류 코드 외에도 요청을 인증하려고 할 때 다음 오류가 표시될 수 있습니다.
- ERR_MISSING_AUTH_CREDENTIALS: 계정 정보를 사용할 수 없습니다. 다음과 같은 이유로 발생할 수 있습니다.
- 사용자가 인증자 앱에 로그인하지 않았고 적격 계정을 찾을 수 없습니다.
- 현재 앱에 필요한 권한이 없으므로 계정 정보를 가져올 수 없습니다.
- 둘 이상의 적격 계정이 있으며 사용자로부터 선택을 받을 수 없습니다.
- ERR_UNEXPECTED: 예기치 않은 오류가 발생하여 요청이 종료되었습니다.
- ERR_MISCONFIGURED_AUTH_ENVIRONMENT: 앱 구성의 일부 문제로 인해 인증을 완료할 수 없습니다. 일부 권한이 누락되었을 수 있습니다.
Logcat을 사용하여 시스템 로그에서 cr_net_auth 태그를 검색하여 이러한 오류의 원인에 대한 자세한 정보를 가져옵니다.
Microsoft Edge에서 인증자 사용
Edge는 SPNEGO 인증 사용을 제어하기 위해 여러 정책을 사용합니다. SPNEGO 인증을 사용하도록 설정하려면 AuthServerAllowList 를 구성해야 하며 AuthAndroidNegotiateAccountType 은 SPNEGO 인증자가 제공하는 계정 유형과 일치해야 합니다.
콘텐츠 라이선스
참고
이 페이지의 일부는 Chromium.org에서 생성 및 공유하고 Creative Commons Attribution 4.0 국제 라이선스에 규정된 조건에 따라 사용되는 작업을 기반으로 합니다. 원래 페이지는 여기에서 찾을 수 있습니다.
이 작업은 Creative Commons Attribution 4.0 국제 라이선스에서 사용이 허가되었습니다.