【问题标题】:How to use Token and Identity Authorization on resource?如何在资源上使用令牌和身份授权?
【发布时间】:2017-03-10 13:40:36
【问题描述】:

我有一个 WEB Api,它使用用户帐户进行注册等以及令牌。 现在我希望使用令牌(JWT 承载)和身份来保护所有端点。所以用户不能只拥有一个有效的令牌,而且他还必须登录。 当我使用[Authorize(Policy = "Bearer")] 获得令牌授权时,当我使用[Authorize] 获得身份授权时,如何将两者结合起来?我会假设我可以做 [Authorize(Policy = "Bearer, Identity")] (基于角色逻辑),但我得到一个错误,即策略不存在。 有没有办法实现这个?

回购:https://github.com/drakoumel/DatacircleAPI

【问题讨论】:

    标签: asp.net-web-api asp.net-core token jwt


    【解决方案1】:

    当我使用 [Authorize(Policy = "Bearer")] 时,我获得了令牌授权,当我使用 [Authorize] 时,我获得了身份授权,如何将两者结合起来? [原文]

    设置ActiveAuthenticationSchemes 属性。它采用逗号分隔的方案名称列表。这是一个激活 Identity 使用的 cookie 中间件和承载(令牌)中间件的示例。

    [Authorize(ActiveAuthenticationSchemes = "Bearer, Identity.Application")]
    

    bearer 和 cookie 中间件都将运行,并有机会为当前用户创建和附加身份。

    备注:

    您可以激活所需的任何身份验证方案。默认方案名称位于 IdentityAuthentication 命名空间中。例如。

    Microsoft.AspNetCore.Authentication.JwtBearer
        .JwtBearerDefaults.AuthenticationScheme // "Bearer"
    
    Microsoft.AspNetCore.Identity
        .IdentityCookieOptions.ApplicationCookie // "Identity.Application"
    
    ...
    

    另见:

    【讨论】:

    • 嗯我应用了该行,现在虽然令牌无效(终身无效),但它正常进行并允许用户访问资源,因为他已登录。它不应该需要两个身份验证才能通过吗?这是我的控制器 (getUser()) github.com/drakoumel/DatacircleAPI/blob/master/Controllers/… 和我的 startup.cs github.com/drakoumel/DatacircleAPI/blob/master/Startup.cs
    • 所以我得到信息:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[7] Bearer 未通过身份验证。失败消息:IDX10223:生命周期验证失败。令牌已过期。和信息:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware[3] HttpContext.User 通过来自 authenticationScheme 的 AutomaticAuthentication 合并:Identity.Application。信息:Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware[8] AuthenticationScheme:Identity.Application 已成功通过身份验证。
    • 根据文档,它说这两个策略都会更改以填充用户,是否可以强制要求两者都必须通过?
    • @Drakoumel 让我看看我是否理解正确。您希望强制用户拥有令牌和用户拥有 Cookie。对吗?
    • 是的。问题是我需要一个安全的应用程序,我不能让别人窃取用户令牌而不是 cookie 并使用它。
    猜你喜欢
    • 2017-04-20
    • 2017-12-10
    • 2022-01-24
    • 2019-06-22
    • 2020-04-28
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多