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

时间:2017-08-02 10:42:38

标签: asp.net-mvc asp.net-core openid-connect identityserver4

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

我在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]属性时,它会重定向到我的身份服务器,如果检查失败,它会在{{}处寻找登录页面{1}}

现在我遇到的问题是我要登录页面由http://localhost:5002/signin-oidc托管的Identity Server托管,以便所有MVC服务都使用它来获取用户身份,但不幸的是我无法看到如何设置此http://localhost:5000/signin-oidc

enter image description here

我知道图表在引用流程时的工作原理是不准确的,只是想简化我想要完成的事情:)

是否有可能实现这一目标?

此致 基兰

1 个答案:

答案 0 :(得分:28)

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

  1. 用户访问ASP.NET Core站点。
  2. 应用程序要求默认身份验证方案"Cookies"进行身份验证。
    1. cookie身份验证处理程序尝试从(签名)cookie信息中恢复身份。
    2. Cookie身份验证失败,因为缺少Cookie。
  3. 应用程序要求默认质询方案"oidc"执行身份验证质询。
    1. OpenIdConnect身份验证处理程序重定向到OpenId Connect身份验证提供程序,这是您的Identity Server。
    2. 用户在Identity Server上成功登录。
    3. 用户被发布到/signin-oidc,这是OpenId Connect身份验证处理程序的远程登录地址。
    4. OpenId Connect身份验证中间件处理/signin-oidc路由,并从Identity Server的登录请求中检索用户信息。
    5. OpenId Connect身份验证方案创建身份验证票证,并要求配置的登录方案登录用户。
  4. Cookie身份验证方案处理登录过程并创建用户身份。它将身份存储在cookie中,因此可以在将来的请求中检索它,而无需再次通过整个身份验证挑战管道。
  5. 用户已登录。
  6. 因此,/signin-oidc端点是返回应用程序以完成 OpenId Connect身份验证流程的登录过程的方法。当用户到达此地址时,他们已经登录了Identity Server,并且他们将被重定向回应用程序以继续他们最初离开的位置。

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

    所以不,这里没有登录表格。登录过程本身由您的OpenId Connect身份验证提供程序Identity Server负责。这就是关于这一点的全部观点,所以你可以使用您的Google凭据安全登录google.com,而不是my-random-and-probably-untrusted-app.example.com,这绝对不会获取您的实际Google凭据。