2017-09-18 4 views
0

issue on githubが作成されました。これはバグです。MsalServiceException:AADSTS90023:パブリッククライアントはクライアントシークレットを送信できません

PROBLEM

私はMSALとAzureのADを使用して、ASP.NetのCore 2 Webアプリケーションにログインしようとしています。

AcquireTokenByAuthorizationCodeAsyncと私はエラーメッセージが表示されます。

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

あり、私がやっている正確に何をしてコーディングの多くの例がありませんが、what does existClientSecretClientCredentialとしてConfidentialClientApplicationに渡されて表示されます。

エラーメッセージに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クラスのタイプについて混乱している理由について、もう少し理解してください。

REQUEST &応答

ここに私が送るリクエストです:

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 - アクセストークンを取得する」という見出しの下に表示されます。

APPの登録

私はアズールAD v2のアプリモデルを使用する必要があり、 "統合型" アプリケーション登録を作成しました。

これには、Client Secretとして使用される単一のApplication Secret、Passwordがあります。

これには、単一のプラットフォーム、Web、Allow Implicit Flow、1つのリダイレクトURLセット、およびログアウトURLはありません。私は首尾よくそれを使用しているhttps://azure.microsoft.com/en-gb/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/

答えて

0

この例では、この作業を行う方法を示しています。

関連する問題