2017-10-18 2 views
1

B2C 사용자에 대한 액세스 및 새로 고침 토큰 세트를 가져 오려고하는 웹 API가 있습니다. 사용자 로그인은 구성된 "소셜 아이디 공급자"를 통해 수행됩니다.Azure AD B2C가 토큰 요청시 AADSTS70000 오류를 반환합니다.

API는 인증 코드를받습니다. 토큰에 대한 코드를 교환 할 때 Azure AD B2C 세입자의 종단점은 invalid_grant 오류를 반환합니다.

사이트에서 찾은 다른 답변을 살펴 보았습니다. 여전히 문제는 남아 있습니다. 포인터 많이 감사합니다.

자세한 내용은 다음과 같습니다.

:

  • 에 대한

    로그인 접속 및 로그인에 프로파일 문제의 주장은 이름을

  • 이메일
  • ID 공급자
  • 개체 ID

토큰 엔드 포인트의 오류를 감안할 때

{ 
    "error": "invalid_grant", 
    "error_description": "AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid. [...]", 
    "error_codes": [ 
     70000 
    ], 
    [...] 
} 
다음과 같이 1,363,210

인증 요청을 보이는 : 사용자 권한 부여시

AUTHORIZATION_ENDPOINT = 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/authorize' 

authorization_url = f'{AUTHORIZATION_ENDPOINT}' \ 
    f'?client_id={CLIENT_ID}' \ 
    f'&response_type=code' \ 
    f'&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcode' \ 
    f'&scope=openid offline_access' \ 
    f'&nonce=hellobob' \ 
    f'&p=B2C_1_<profile>' 

는 인증 코드는 API에 의해 POST 에드 엔드 포인트 토큰하는 것입니다. 페이로드는 파이썬 사전으로 표현됩니다.

TOKEN_ENDPOINT = 'https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token' 
payload = { 
    'p': 'B2C_1_<profile>', 
    'client_id': CLIENT_ID, 
    'client_secret': CLIENT_SECRET, 
    'code': code, 
    'grant_type': 'authorization_code', 
    'redirect_uri': 'http://localhost:8000/code', 
    'scope': 'openid offline_access' 
} 

response = requests.post(TOKEN_ENDPOINT, data=payload) 

답변

1

이 오류는 일반적으로 사용자가받은 인증 코드가 지정된 엔드 포인트의 토큰을 의미하지 않는다는 것을 의미합니다. 이는 인증 엔드 포인트를 잘못 구성하거나 잘못된 지점에 앱을 등록하거나 조작 된 요청으로 인해 발생할 수 있습니다. 대부분의 B2C 오류는 aadstsxxxxx의 Azure AD 오류 형식이 아닌 aadb2cxxxxx의 형식입니다.

이 오류로 가장 먼저 확인해야 할 사항은 인증 끝점입니다. 위의 스 니펫에서 모두 잘 보입니다.

다음은 올바른 라이브러리를 사용하여 인증 코드를 얻는 것입니다. 클라이언트에 코드를 표시하지 않았지만 ADAL 라이브러리 또는 v1.0 엔드 포인트를 사용하는 경우 인증 코드는 /v2.0/ 엔드 포인트에서 상환되지 않습니다.

Azure 포털의 잘못된 블레이드에 앱이 등록 된 경우에도 이런 현상이 발생했습니다. Azure AD 앱이 아닌 Azure AD B2C 애플리케이션을 등록했는지 확인하십시오.

  1. 코드 샘플이 아닌 앱 등록 중 하나에서 test B2C application를 사용하고 작동하는지 확인 :이 작업을 완료 한 경우

    , 나는이 일을 시도하는 것이 좋습니다. 그렇다면 등록 문제가 있다는 것을 알고 계실 것입니다. 이 registration guide은 진단하는 데 도움이 될 수 있습니다.

  2. 앱 등록 (코드가 아닌)을 사용하여 직접 요청하십시오. 이렇게하면 코드 문제인지 이해하는 데 도움이됩니다. Construct the request을 사용하고 Curl 또는 Postman을 사용하고 코드를 교환하십시오. 쉬운 대안은 configs를 샘플에 연결하는 것입니다.

+0

'https://login.microsoftonline.com/te/ .onmicrosoft.com//oauth2/v2.0/token'이어야하는 토큰 엔드 포인트 URL이 문제였던 것 같습니다. 'https : //login.microsoftonline.com/tfp/ ... '에 대한 언급과는 별도로 B2C 문서에서 이에 대한 언급을 찾을 수 없습니다. 최근 변화입니까? – MrBink

+0

이상한 점은 B2C 팀에 문의하겠습니다. –

+1

Azure AD B2C를 대상으로하는 세 가지 방법이 있습니다. 1. 경로에서 te 또는 tfp없이 사용한 URL 사용 및 쿼리 매개 변수로 정책 지정 (p = policyName) 2. 경로에서 te 사용 b2c policy 이름이 인 경우 3. 경로에 tfp를 사용하여 b2c policy 이름 – Parakh

1

토큰 엔드 포인트의 URL이 잘못되었습니다. 승인 및 토큰 엔드 포인트 URL은 쿼리 매개 변수의 일부로 B2C 프로필을 포함해야합니다 (예 : https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token?p=<B2C_profile>.

다른 방법으로는 허가 다음 URL을 사용하여 각각 엔드 포인트 토큰 :

  • https://login.microsoftonline.com/te/<tenant>.onmicrosoft.com/<B2C_profile>/oauth2/v2.0/token
  • B2C_profile

    • https://login.microsoftonline.com/te/<tenant>.onmicrosoft.com/<B2C_profile>/oauth2/v2.0/authorize
    • 낮은 경우입니다.

      OpenID 검색 문서는 https://login.microsoftonline.com/te/<tenant>.onmicrosoft.com/<B2C_profile>/v2.0/.well-known/openid-configuration입니다.

      OpenID 공급자 구성 문서는 기본 Azure AD를 토큰 발급자로 나열하므로 토큰이 Azure AD 또는 B2C에서 온 것인지 여부를 판별하기 어렵습니다. 그러나 B2C 토큰에는 tfp -claim referring to the policy name이 사용 된 것으로 보입니다.

      또한 B2C는 청구 된 토큰 발급자와 다른 서명 키를 사용합니다. 토큰의 유효성을 검사 할 때 B2C 키를 사용해야합니다!

    관련 문제