2017-04-19 27 views
0

我的ASP.NET Core Web應用程序在本地運行和調試時效果很好,但一旦發佈到Azure就無法運行。ASP.NET Core Web App使用Work(Azure AD)身份驗證可在本地進行調試,但不會在發佈到Azure後進行調試

  • 我啓用了組織認證的,並選擇在發佈時相應的域。
  • 適當回覆的網址被註冊

後,我發佈到Azure中我得到這個錯誤:處理請求時發生

未處理的異常。 OpenIdConnectProtocolException:消息包含錯誤:'invalid_client',error_description:'AADSTS70002:請求正文必須包含以下參數:'client_secret或client_assertion'。 跟蹤ID:640186d6-9a50-4fce-ae39-bbfc1caf2400 相關ID:622758b2-ca52-4bb0-9a98-e14d5a45cf80 時間戳:2017-04-19 16:36:32Z',error_uri:'error_uri爲空'。

我假設這是因爲客戶端密鑰需要存儲在Azure某處;然而,當我將它作爲應用程序設置(無效的客戶機密鑰錯誤)添加時,secrets.json中的值不起作用,因爲我看到有人能夠在另一個帖子上做。無論如何,在Azure AppSettings中添加「身份驗證:AzureAd:ClientSecret」的值也不是一個好主意。

+0

它如果你把它們放在Azure AppSettings中工作? – Win

+0

如果包含在AppSettings中,則會得到不同的錯誤:Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException:消息包含錯誤:'invalid_client',error_description:'AADSTS70002:驗證憑據時出錯。 AADSTS50012:提供無效的客戶機密。 –

+0

看看我的[GitHub倉庫]的屏幕截圖(https://github.com/WinLwinOoNet/AspNetCoreAzureAD#azure-portal---app-registrations---step-1),看看你錯過了哪一步。 – Win

回答

0

不知何故,我將Azure Active Directory應用程序註冊所需的Azure AD ID混淆在一起。有2個應用程序註冊條目,並且ClientID和TenentID與本地不匹配。因此,我將客戶端和Tenent ID與其中一個應用註冊條目同步,並確保客戶端密鑰在應用設置中,並且正常運行。

我用這個好例子Win's GitHub repository驗證了這些步驟,它們現在匹配。

0

不確定這對任何人是否有用。但我收到類似的錯誤消息。

OpenIdConnectProtocolException: Message contains error: 'invalid_client', error_description: 'error_description is null', error_uri: 'error_uri is null'. 
Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler+<RedeemAuthorizationCodeAsync>d__22.MoveNext() 

對我來說,解決辦法是在令牌中提供服務

,new Client 
      { 
       ClientId = "Testclient", 
       ClientName = "client", 
       ClientSecrets = 
       { 
        new Secret("secret".Sha256()) 
       }, 
       //Hybrid is a mix between implicit and authorization flow 
       AllowedGrantTypes = GrantTypes.Hybrid, 

祕密和客戶端提供的祕密

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
      { 
       //The name of the authentication configuration.. just incase we have multiple 
       AuthenticationScheme = "oidc", 
       //Represents where to store the identity information -> which points to the cookie middleware declared above 
       SignInScheme = "Cookies", 

       //where the token service reside -> system will configure itself by invoking the discovery endpoint for the token service 
       Authority = "http://localhost:5000", 
      RequireHttpsMetadata = false, 

      ClientId = "Testclient", 
      ClientSecret = "secret", 
      //hybrid flow -grant type 
      ResponseType = "code id_token", 

希望這可以幫助別人

相關問題