中央授权和身份验证端点使用AspNet.Security.OpenIdConnect.Server (OIDC)



我正在使用Visual Studio 2015 Enterprise Update 1和ASP.NET 5 rc1 final来构建一个端点,该端点同时发布和使用JWT令牌,如这里详细描述的。在这种方法中,我们有一个"无所不能"的项目——该项目使用OIDC发布令牌,JWT承载身份验证来验证令牌,然后使用Authorize属性保护对各种控制器的访问——所有这些都在同一个项目中。

现在,我们想通过创建OIDC授权&仅发布和验证令牌的身份验证端点。然后,我们需要"n"个附加端点,这些端点依赖于OIDC端点作为验证令牌的中心权威。这将使我们能够在不断增长的服务主干上建立更多的端点,而不必对授权&对每个端点进行身份验证。

虽然我了解如何配置OIDC从一个端点发出令牌,但我还不完全清楚如何将另一个端点指向OIDC端点进行令牌身份验证。目前,JWT身份验证和OIDC是在中间件的"配置"方法中同时配置的,所以我猜也许在所有下属网站上,我都会在调用应用程序中有一小段代码。使用JwtBearerAuthentication只是将JWT中间件指向OIDC端点?如果是这样的话,这个应用程序仍然有一些魔力。使用JwtBearerAuthentication,它使用OIDC来允许IdentityModel使用HTTP,所以我不清楚是否在从属服务器上也需要它。

关于如何建立单一OIDC授权的任何建议&身份验证端点,然后让"n"个从属端点指向该端点进行JWT令牌的身份验证,将不胜感激。

使用ASOS,将资源服务器角色(即API)与授权服务器角色分离是完全可能的。

选择JWT令牌(而不是默认的加密令牌)时,您需要通过调用ticket.SetResources来确保受众正确添加到身份验证票证中,因此JWT访问令牌将获得适当的aud声明,其中包含与资源服务器(即API)相关联的标识符:

public override Task GrantResourceOwnerCredentials(GrantResourceOwnerCredentialsContext context) {
    var identity = new ClaimsIdentity(context.Options.AuthenticationScheme);
    identity.AddClaim(ClaimTypes.NameIdentifier, "[unique identifier]");
    var ticket = new AuthenticationTicket(
        new ClaimsPrincipal(identity),
        new AuthenticationProperties(),
        context.Options.AuthenticationScheme);
    // Call SetResources with the list of resource servers
    // the access token should be issued for.
    ticket.SetResources("resource_server_1");
    // Call SetScopes with the list of scopes you want to grant.
    ticket.SetScopes("profile", "offline_access");
    context.Validate(ticket);
    return Task.FromResult(0);
}     

在API应用程序中,只需使用授权服务器中使用的标识符设置options.Audience属性,它就可以工作:

app.UseJwtBearerAuthentication(new JwtBearerOptions {
    AutomaticAuthenticate = true,
    AutomaticChallenge = true,
    Audience = "resource_server_1",
    Authority = "http://localhost:61854"
});

我会在调用应用程序中有一小段代码。使用JwtBearerAuthentication只是将JWT中间件指向OIDC端点?如果是这样的话,这个应用程序仍然有一些魔力。使用JwtBearerAuthentication,它使用OIDC来允许IdentityModel使用HTTP,所以我不清楚是否在从属服务器上也需要它。

JWT承载中间件通过对配置元数据端点进行HTTP调用,自动从options.Authority属性中提到的授权服务器检索用于对访问令牌进行签名的加密密钥:即使API项目与授权服务器应用程序分离,也不必配置任何内容

最新更新