我的ASP.NET核心Web应用程序在本地运行和调试时运行良好,但在发布到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中放置“Authentication:AzureAd:ClientSecret”的值是否是一个好主意。
答案 0 :(得分:4)
不确定这对任何人是否有用。但我收到类似的错误消息。
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",
希望这有助于某人
答案 1 :(得分:0)
不知何故,我正确的Azure Active Directory应用程序注册所需的Azure AD ID被混淆了。有2个应用程序注册条目,ClientID和TenentID与本地不匹配。因此,我将客户端和Tenent ID与其中一个应用程序注册条目进行了同步,并确保客户端密钥位于应用程序设置中,并且它正常工作。
我使用这个很好的示例Win's GitHub repository验证了这些步骤,现在它们匹配。