使用Work(ASP.NET AD)身份验证的ASP.NET Core Web App在本地进行调试,但在发布到Azure之后无法进行调试

时间:2017-04-19 19:56:26

标签: azure asp.net-core azure-active-directory

我的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”的值是否是一个好主意。

2 个答案:

答案 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验证了这些步骤,现在它们匹配。