使用AspNet.Security.OpenIdConnect.Server(ASP.NET vNext)实现自定义主体



我正在使用Visual Studio 2015 Enterprise和ASP.NET vNext Beta8来构建一个端点,该端点同时发布和使用JWT令牌,如这里详细描述的。

我正处于我的项目阶段,我希望允许JWT承载身份验证按照上面提到的文章中的讨论进行,但一旦令牌经过身份验证,我希望:

  • JWT认证成功后介入并检查其各种索赔
  • 根据我在令牌中找到的内容,水合我自己的主体对象(比如IContosoPrincipal)的一个作用域实例
  • 确保IContosoPrincipal的backing混凝土的作用域为当前请求
  • 依赖项稍后将IContosoPrincipal注入到我的一个令牌保护控制器中

我确信这将涉及一个作用域的IContosoPrincipal对象,我很可能会弄清楚这一部分,但我不确定如何在令牌成功通过身份验证后但在控制器/操作调用发生之前拦截JWT身份验证

任何关于如何处理这一问题的建议都将不胜感激。

ASP.NET 5中不(也不会)正式支持自定义主体/标识。您可以找到有关此主题的更多信息:https://github.com/aspnet/Security/issues/323.

相反,强烈建议您将所需的数据存储为单独的索赔,并在需要时(例如,如果需要格式化索赔值)提供围绕ClaimsIdentity/ClaimsPrincipal的扩展方法。

FWIW,这个模式被ASP.NET Identity 3本身大量使用,它带有内置的扩展(如GetUserNameGetUserId),您可以在自己的代码中使用:

/// <summary>
/// Returns the User ID claim value if present otherwise returns null.
/// </summary>
/// <param name="principal">The <see cref="ClaimsPrincipal"/> instance this method extends.</param>
/// <returns>The User ID claim value, or null if the claim is not present.</returns>
/// <remarks>The User ID claim is identified by <see cref="ClaimTypes.NameIdentifier"/>.</remarks>
public static string GetUserId(this ClaimsPrincipal principal)
{
    if (principal == null)
    {
        throw new ArgumentNullException(nameof(principal));
    }
    return principal.FindFirstValue(ClaimTypes.NameIdentifier);
}

https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity/PrincipalExtensions.cs

相关内容

  • 没有找到相关文章

最新更新