代码之家  ›  专栏  ›  技术社区  ›  jason

Asp。net OpenID标识服务器指定范围导致错误

  •  0
  • jason  · 技术社区  · 6 年前

    我有一个ASP。Net web表单网站,我想通过Identity Server 3进行身份验证。在Identity Server应用程序中,我定义了一个范围列表(其中一个是“电子邮件”)。但是,当我运行代码并尝试进行身份验证时,会出现一个错误。如果我删除Scope属性,它运行正常,但不包括我请求的Scope字段(只有通用声明)。这是我的代码:

    Public Sub ConfigureAuth(app As IAppBuilder)
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
                JwtSecurityTokenHandler.DefaultInboundClaimTypeMap = New Dictionary(Of String, String)
                app.UseCookieAuthentication(New CookieAuthenticationOptions() With {
                    .AuthenticationType = "Cookies"
                })
    
                Dim OpenIdAuthOption = New OpenIdConnectAuthenticationOptions() With {
                   .Authority = "https://myidentityserver.azurewebsites.net/core/",
                   .ClientId = "adfasdfafasdfasfasf",
                   .RedirectUri = "https://localhost:44321/default.aspx/",
                   .ResponseType = OpenIdConnectResponseType.IdTokenToken,
                   .SignInAsAuthenticationType = "Cookies",
                   .Scope = "email",
                   .Notifications = New OpenIdConnectAuthenticationNotifications() With {
                        .SecurityTokenReceived = Function(ctx)
                                                     Return Task.FromResult(0)
                                                 End Function,
                        .MessageReceived = Function(ctx)
                                               Return Task.FromResult(0)
                                           End Function,
                        .SecurityTokenValidated = Function(ctx)
                                                      Dim claimPrincipal = ctx.AuthenticationTicket.Identity
                                                      TransformClaims(claimPrincipal)
                                                      Return Task.FromResult(0)
                                                  End Function,
                        .AuthorizationCodeReceived = Function(ctx)
                                                         Return Task.FromResult(0)
                                                     End Function,
                        .RedirectToIdentityProvider = Function(context)
                                                          RedirectLogin(context)
                                                          Return Task.FromResult(0)
                                                      End Function
                        }
                }
                app.UseOpenIdConnectAuthentication(OpenIdAuthOption)
            End Sub
    

    我得到的错误是:

    “OpenIdConnectMessage.Error不为null,表示有错误。错误: “无效的请求”。错误描述(可能为空):“”。错误_Uri (可能是空的):''。"

    有人能解释一下我如何从Identity Server获取范围值(如“电子邮件”)吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Hunny Sharma    6 年前

    在客户端配置的范围内,如果使用响应类型(IdTokenToken/CodeIdToken/CodeIdToken/CodeIdToken/CodeIdToken),也必须添加openid

    你的代码应该是

    Dim OpenIdAuthOption = New OpenIdConnectAuthenticationOptions() With {
               .Authority = "https://myidentityserver.azurewebsites.net/core/",
               .ClientId = "adfasdfafasdfasfasf",
               .RedirectUri = "https://localhost:44321/default.aspx/",
               .ResponseType = OpenIdConnectResponseType.IdTokenToken,
               .SignInAsAuthenticationType = "Cookies",
               .Scope = "openid email",
               .Notifications = New OpenIdConnectAuthenticationNotifications() With {
                    .SecurityTokenReceived = Function(ctx)
                                                 Return Task.FromResult(0)
                                             End Function,
                    .MessageReceived = Function(ctx)
                                           Return Task.FromResult(0)
                                       End Function,
                    .SecurityTokenValidated = Function(ctx)
                                                  Dim claimPrincipal = ctx.AuthenticationTicket.Identity
                                                  TransformClaims(claimPrincipal)
                                                  Return Task.FromResult(0)
                                              End Function,
                    .AuthorizationCodeReceived = Function(ctx)
                                                     Return Task.FromResult(0)
                                                 End Function,
                    .RedirectToIdentityProvider = Function(context)
                                                      RedirectLogin(context)
                                                      Return Task.FromResult(0)
                                                  End Function
                    }
            }