IdentityServer 4,OpenIdConnect 重定向到外部登录 url

IdentityServer 4, OpenIdConnect redirect to external sign-in url

我正在尝试构建多个小型 ASP.Net 核心 Mvc 服务,这些服务连接到使用 IdentityServer4 构建的身份服务器。

我在 MVC 服务上设置了 OpenIdOption,如下所示

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationScheme = "Cookies"
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
    AuthenticationScheme = "oidc",
    SignInScheme = "Cookies",

    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,

    ClientId = "mvc",
    ClientSecret = "secret",

    ResponseType = "code id_token",
    Scope = { "api1", "offline_access" },

    GetClaimsFromUserInfoEndpoint = true,
    SaveTokens = true
});

其中 http://localhost:5000 是我的身份服务器所在的端点 运行。假设我的 MVC 服务器位于 http://localhost:5002,我看到当我为控制器设置 [Authorize] 属性时,它会重定向到我的身份服务器,如果检查失败,它会在 http://localhost:5002/signin-oidc

现在我遇到的问题是,我希望登录页面由我在 http://localhost:5000/signin-oidc 托管的 Identity Server 托管,以便所有 MVC 服务都利用它来获取用户身份,但不幸的是我看不到如何设置这个 RedirectUrl.

我知道图表在参考流程方面的工作方式不准确,只是想简化我想要完成的工作:)

有可能实现吗?

问候 基兰

您似乎误解了 /signin-oidc 路线的用途。一般流程是这样的:

  1. 用户访问 ASP.NET 核心站点。
  2. 应用要求默认身份验证方案 "Cookies" 进行身份验证。
    1. cookie 身份验证处理程序尝试从(签名的)cookie 信息中恢复身份。
    2. Cookie 身份验证失败,因为缺少 cookie。
  3. 应用要求默认质询方案 "oidc" 执行身份验证质询。
    1. OpenIdConnect 身份验证处理程序重定向到 OpenId Connect 身份验证提供程序,这是您的身份服务器。
    2. 用户在身份服务器上成功登录。
    3. 用户被发布到 /signin-oidc,这是 OpenId Connect 身份验证处理程序的远程登录地址。
    4. OpenId Connect 身份验证中间件处理 /signin-oidc 路由并从 Identity Server 发出的登录请求中检索用户信息。
    5. OpenId Connect 身份验证方案创建身份验证票证并要求配置的登录方案登录用户。
  4. Cookie 身份验证方案处理登录过程并创建用户身份。它将身份存储在 cookie 中,因此可以在以后的请求中检索它,而无需再次通过整个身份验证质询管道。
  5. 用户已登录。

因此 /signin-oidc 端点是 return 返回您的应用程序以 完成 OpenId Connect 身份验证流程的登录过程的途径。当用户到达此地址时,他们已经在 Identity Server 上登录,他们将被重定向回应用程序以继续他们最初离开的地方。

通常,用户在该路由上花费的时间最少,因为它会在处理完登录请求后立即重定向回“正确的”应用程序路由。

所以不,这里没有登录表单。登录过程本身由您的 OpenId Connect 身份验证提供程序(您的身份服务器)负责。这就是重点,所以你例如使用您的 Google 凭据在 google.com 上安全登录,而不是在 my-random-and-probably-untrusted-app.example.com 上安全登录,这绝对不应该掌握您的实际 Google 凭据。