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
,以便客户端知道它需要再次获得一个新的令牌。
你能想出一种方法来结合这两个流程,以便它们很好地结合在一起吗?