2

IdentityServer3 OpenID Connect authentication我们正在构建一个用于保护它的应用程序RESTful APIs

对于UI访问,我们使用在 注册的隐式流客户端IS3。我们的 Startup 类设置OIDC Owin Security module连接到IS3. 一切都很好。

此应用程序的下一个要求是我们REST API不仅可以通过 web 访问UI,还可以通过其他服务访问。客户端凭据流似乎符合要求。REST API关键是让服务通过重定向到IS3登录页面并在那里填写用户名/密码来联系我们是不切实际的。Client Credential 流客户端直接在IS3服务器上获取令牌,然后对我们的REST API.

Startup 类如下所示:

internal class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // The Bearer token authentication is used for service to service
        // REST API access (also for testing purposes)
        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["IdmUrl"],
            NameClaimType = "client_id",
            RoleClaimType = "client_role"
            // ...
        });

        // OIDC authentication is used for UI access
        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = ConfigurationManager.AppSettings["IdmUrl"],
            // ...
        }
    }
}

它适用于这两种情况,人类通过浏览器访问它,因此使用隐式流以及使用客户端凭据流的服务。但是,如果服务在客户端凭据流中使用的令牌过期,请求将再次重定向到IS3服务器。我们希望它返回401 error,以便客户端知道它需要再次获得一个新的令牌。

你能想出一种方法来结合这两个流程,以便它们很好地结合在一起吗?

4

1 回答 1

1

要允许 401 未经授权但也允许 302 重定向与 UI 的,您需要实现一个像这里的解决方案(来自 Identity Server 的作者之一)。

在这种情况下,这会通过添加 AJAX 检测来调整app.UseCookieAuthentication()设置,并仅在检测到 AJAX 请求时重定向到登录页面。您应该能够根据自己的需要进行调整。

于 2015-08-21T13:15:16.493 回答