2017-02-10 3 views
1

인증 코드없이 액세스 토큰을 얻으려고합니다. 하지만 난AcquireTokenAsync로 액세스 토큰을 가져 오려고했지만 예외 본문 매개 변수를 사용하지 못했습니다. 'client_secret 또는 client_assertion'이 포함되어야합니다.

는이에 필요한 포인터를 제안 할 수 있습니다 "다음 매개 변수 'client_secret 또는 client_assertion'를 포함해야합니다 요청 본문"으로 문제에 직면하고있다. 이것을 실행하는 것은 console application입니다.

try 
{ 
    // Use the 'Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory' Nuget package for auth. 
    AuthenticationContext authContext = new AuthenticationContext(authority); 
    AuthenticationResult authResult = authContext.AcquireTokenAsync(resourceId, clientId, new UserCredential(crmAdminUserName, crmAdminPassword)).Result; 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.Message); 
} 
+0

에서 사용할 수 있습니다 : http://stackoverflow.com/a/41159005/1658906? – juunas

+0

문제는 해당 ADAL 버전이 Password Grant Flow를 제대로 지원하지 않는다는 것입니다. 전화에서 클라이언트 비밀도 보내야합니다. 그것이 오류 메시지를받는 이유입니다. 그러나 이미 연결된 링크를 통해이 문제에 대한 해결책을 제시 했으므로 여기서 다시 쓰지 않을 것입니다. – juunas

+0

그것을보고 있습니다. –

답변

0

는 푸른 광고의 클라이언트 두 가지 종류가 있습니다, 하나는 공공이고 다른 하나는 우리가 토큰을 취득 할 때 비밀을 제공 요구하는 비밀이 보장됩니다.

이 문제를 해결하려면이 시나리오에서 공용 클라이언트 (기본 클라이언트 응용 프로그램)를 등록 할 수 있습니다.

Here은 Azure 액티브 디렉토리와 응용 프로그램을 통합하는 데 유용한 문서입니다.

0

포털에서 app is registered을 가정하면, 당신은

그런 다음이 코드는 당신에게 액세스 토큰을 얻을 것이다 클라이언트 ID, 클라이언트 비밀 키/응용 프로그램 키, 권위와 관객을 알고

AuthenticationContext authContext = new AuthenticationContext(authority); ClientCredential clientCredential = new ClientCredential(clientId, clientkey); AuthenticationResult authenticationResult = await authContext.AcquireTokenAsync(ResourceUrl, clientCredential);

리소스 ID/리소스 URL 예 https://manage.windowsazure.com/

AcquireTokenAsync 문서는 here

AuthenticationContext 클래스 문서에서 사용할 수 {자리 -에 대한 - 네 - 푸른-광고 테넌트 이름} .onmicrosoft.com이 귀하의 질문에 대답 할 수 here

+0

잠재 고객이 있습니까? – DannyThunder

+0

@DannyThunder 코드 스 니펫을 편집했습니다. Azure AD Tenant에 대한 리소스 URL입니다. 편집 된 텍스트를 참조하십시오. –