2017-09-18 1 views
0

issue on github이 버그 일 경우 작성했습니다.MsalServiceException : AADSTS90023 : 공용 클라이언트가 클라이언트 비밀을 보낼 수 없습니다.

내가 MSAL와 푸른 AD를 사용하여, ASP.Net 코어 2 웹 응용 프로그램에 로그인하기 위해 노력하고있어

문제.

AcquireTokenByAuthorizationCodeAsync으로 전화하면 오류 메시지가 나타납니다.

MsalServiceException: AADSTS90023: Public clients can't send a client secret..

내가 뭘 정확히하고 코딩의 많은 예제가 아니다

하지만 what does existClientSecretClientCredentialConfidentialClientApplication에 전달되는 것을 보여줍니다.

오류 메시지가 PublicClientApplication을 나타내므로 나는 혼란 스럽습니다. ConfidentialClientApplication을 사용하고 있습니다.

CODE

여기에 오류가 발생하는 전체 방법입니다 :

public void Configure(string name, OpenIdConnectOptions options) 
{ 
    options.Authority = $"{azureADOptions.Instance}{azureADOptions.TenantId}"; 
    options.CallbackPath = azureADOptions.CallbackPath; 
    options.ClientId = azureADOptions.ClientId; 
    options.ResponseType = OpenIdConnectResponseType.CodeIdToken; 
    options.UseTokenLifetime = true; 

    options.Events = new OpenIdConnectEvents 
    { 
     OnAuthorizationCodeReceived = async context => 
     { 
      var clientID = options.ClientId; 
      var authority = options.Authority; 
      var redirectUri = this.azureADOptions.RedirectUri; 
      var clientCredentials = new ClientCredential(azureADOptions.ClientSecret); 
      var tokenCache = AzureADUtils.GetTokenCache(context.HttpContext, context.Principal); 

      var clientApp = new ConfidentialClientApplication(clientID, authority, redirectUri, clientCredentials, tokenCache, null); 

      try 
      { 
       var code = context.ProtocolMessage.Code; 
       var scopes = new[] 
       { 
        AzureADScopes.User.ReadBasicAll, 
        AzureADScopes.Group.ReadAll 
       }; 

       //AJ: This line is where the exception is thrown. 
       var result = await clientApp.AcquireTokenByAuthorizationCodeAsync(code, scopes); 

       context.HandleCodeRedemption(result.AccessToken, result.IdToken); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 
    }; 
} 

오류 메시지가 오히려하게하는, 클라이언트 측 생성되는 것이 아니라, 서버 측에서 온 표시가 조금 더 감각적 인 이유에 관해서는 *ClientApplication 클래스의 클래스에 대해 혼란스러워하고 있습니다.

POST https://login.microsoftonline.com/[REMOVED]/oauth2/v2.0/token HTTP/1.1 
Connection: Keep-Alive 
Content-Type: application/x-www-form-urlencoded 
Accept: application/json 
Cookie: x-ms-gateway-slice=006; stsservicecookie=ests; esctx=[REMOVED] 
x-client-SKU: MSAL.CoreCLR 
x-client-Ver: 1.1.0.0 
x-client-OS: Microsoft Windows 10.0.15063 
client-request-id: [REMOVED] 
return-client-request-id: true 
x-ms-request-root-id: [REMOVED] 
x-ms-request-id: [REMOVED] 
Request-Id: [REMOVED] 
Content-Length: 981 
Host: login.microsoftonline.com 

client_id=[REMOVED] 
&client_info=1 
&client_secret=[REMOVED] 
&scope=Group.Read.All+offline_access+openid+profile+User.ReadBasic.All 
&grant_type=authorization_code 
&code=[REMOVED] 
&redirect_uri=https%3A%2F%2Flocalhost%3A44365%2Fsignin-oidc 

그리고 응답은 내가 다시 얻을 :

요청 & 응답 여기

요청은 내가 보낼 것

{ 
    "error": "invalid_request", 
    "error_description": "AADSTS90023: Public clients can't send a client secret.\r\nTrace ID: [REMOVED]\r\nCorrelation ID: [REMOVED]\r\nTimestamp: 2017-09-18 16:12:51Z", 
    "error_codes": [90023], 
    "timestamp": "2017-09-18 16:12:51Z", 
    "trace_id": "[REMOVED]", 
    "correlation_id": "[REMOVED]" 
} 

this MSDN Blog post에 설명 된 것과 매우 가까운 "2 단계 - 액세스 토큰 가져 오기"제목 아래

나는 푸른 AD v2의 응용 프로그램 모델을 사용해야 "컨버전스"응용 프로그램 등록을 만든

APP 등록.

클라이언트 보안으로 사용되는 단일 Application Secret (암호)이 있습니다.

단일 플랫폼, 웹, 허용 암시 적 플로우 허용, 단일 리디렉션 URL 세트 및 로그 아웃 URL 없음. 나는 성공적으로 사용한 https://azure.microsoft.com/en-gb/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/

:

답변

0

이 예는이 작업을하는 방법을 보여줍니다.

관련 문제