使用令牌承载而不是cookie实现身份验证

时间:2018-03-05 11:13:47

标签: authentication asp.net-core asp.net-identity bearer-token

如何在没有cookie的情况下实现身份验证(和授权),并且在ASP.Net MVC Core中只为所有页面实现承载令牌?

我们还可以使用ASP.Net Identity吗?

2 个答案:

答案 0 :(得分:2)

不,您不能将承载令牌与MVC视图一起使用。只有使用WebAPI-esque调用(由JavaScript / Ajax调用调用),因为对于Bearer Token,您需要在HTTP请求中传递包含承载令牌的标头。

ASP.NET Core MVC和ASP.NET Core Identity也都没有提供生成JWT或opaque / refresh令牌的机制。您需要第三方库(ASOSOpenIddictIdentityServer4 - 或者编写您自己的中间件。

通常的方法是使用cookie的MVC(+防伪令牌 - 这些都是重要的,以防止跨站点伪造请求(XSRF)攻击)和承载上的WebAPI(有运行Ajax /休息与饼干电话,你可以安全的担忧然后就像你可以使用AntiForgery令牌做MVC一样轻松保护。有疑问,谷歌关于条款;)

对你有意义吗?

答案 1 :(得分:0)

  1. 您可以将JWT存储在无cookie的会话中-请参见Asp.net mvc 4 - Need to use sessions but can't use cookies

尽管如此,但打败了拥有JWT的目的。

  1. 您可以确保JWT是每个链接中的URL参数,然后重写Application_AuthenticateRequest以在URL中找到该参数,然后手动将标识分配给上下文。查看答案How to use JWT in MVC application for authentication and authorization?

具有多个带有大量JWT令牌数据的链接的总和。同样,如果在链接链中错过了一个,则JWT将被“丢弃”。可以将JWT保存在客户端sessionStore中,并让javascript在单击链接时将JWT动态添加到链接中。