身份服务器和客户端的 ASP.NET 零解决方案

问题描述

在进入这个问题之前,让我告诉你我想要达到的目标。 我需要在我的所有应用程序中实现某种 SSO。我想使用 ASP.NET Zero 解决方案作为 SSO 提供者和客户端。 有可能吗,还是我想多了?

我正在使用 ASP.NET 零模板:ASP.NET Core - MVC & jQuery

我对 IdentityServer 和 OpenId 非常陌生,所以如果我犯了一些愚蠢的错误,请原谅。

一个 ABP 项目中,我向 IdentityServer AppSettings 添加一个静态客户端,如下所示。

一个项目的 AppSettings - 托管应用程序

  {
    "ClientId": "localhost","ClientName": "MVC Client Demo","AllowedGrantTypes": [
      "implicit"
    ],"RequireConsent": "true","ClientSecrets": [
      {
        "Value": "test"
      }
    ],"RedirectUris": [
      "https://localhost:44302/signin-oidc"
    ],"PostlogoutRedirectUris": [
      "https://localhost:44302/Account/Login"
    ],"AllowedScopes": [
      "openid","profile","email","phone","default-api"
    ],"AllowOfflineAccess": "true"
  }

现在,从我的第二个 ABP 项目(本地主机)开始,我尝试启用 OpenId 以通过上述服务器进行身份验证。

第二个项目的 AppSettings - 在本地主机上运行

"OpenId": {
  "IsEnabled": "true","Authority": "https://[applicationname].azurewebsites.net/","ClientId": "localhost","ClientSecret": "test","ValidateIssuer": "true","ClaimsMapping": [
    {
      "claim": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier","key": "http://schemas.microsoft.com/identity/claims/objectidentifier"
    }
  ]
}

但是我没有收到任何错误,在日志中我可以看到有一条消息说:

AuthenticationScheme: Identity.External signed in.

并且正在使用密钥“Identity.External”创建 cookie,但登录未成功发生。 下面一行的 AccountController 内部返回 null,导致登录失败。

    **var externalLoginInfo = await _signInManager.GetExternalLoginInfoAsync();**
    if (externalLoginInfo == null)
    {
        Logger.Warn("Could not get information from external login.");
        return RedirectToAction(nameof(Login));
    }

解决方法

尝试添加

tc

之前 services.AddAuthentication()

这会将 sub 声明映射到 NameIdentifier 声明,因此 GetExternalLoginInfoAsync 不会返回 null。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...