【问题标题】:Authenticate MVC clients with Web API Tokens使用 Web API 令牌对 MVC 客户端进行身份验证
【发布时间】:2017-01-31 14:27:50
【问题描述】:

目前我已经使用身份框架创建了一个 WebAPI 项目,并且我已经设置了在使用 API 进行身份验证时要返回的令牌。

所以现在我正在考虑创建一个独立的 MVC 应用程序,它允许用户调用 WebAPI 以获取后端数据。

目标是分离功能,以便其他应用程序也可以开始通过 Web 调用与后端数据进行交互。

所以现在的困惑是如何设置我的 MVC 项目,以便我可以将控制器上的 Authorize 属性与从 WebAPI 接收的令牌一起使用。我想我需要在 Startup.Auth.cs 的 ConfigureAuth 方法中启用不记名令牌。然而,这就足够了吗?还是我还需要启用 cookie 身份验证?

【问题讨论】:

    标签: asp.net-web-api asp.net-mvc-5


    【解决方案1】:

    在身份验证方面,MVC 和 Web Api 有着根本的不同。使用 Web Api,必须在请求的标头中设置不记名令牌,但这不是问题,因为所有 API 请求都是由客户端以编程方式完成的,即在设置客户端以验证请求时涉及人工干预正确。

    MVC 是一种不同的野兽,因为通常通过 Web 浏览器访问操作,这不会自动将不记名令牌附加到请求标头。它做的是将服务器设置的cookies传回服务器。这就是为什么 cookie auth 最常用于 MVC Web 应用程序的原因。

    您应该为 MVC 站点启用 cookie 身份验证,然后设置您的登录操作以通过 Web Api 进行身份验证。当您从 Web Api 取回有效的身份验证时,您可以通过 Identity API 手动登录用户:

    await SignInManager.SignInAsync(user);
    

    【讨论】:

    • 好吧有道理。那么,要利用授权属性,只需在登录同一个 cookie 后请求并存储声明和角色?
    • 基本上,是的。
    • 我还必须创建 ApplicationSignInManager 实例的新实例 ApplicationUserManager?但我不想创建 DbContext 的新实例,因为我不想直接与 Identity Db 通信。仅通过 API 调用。
    • 这是不可避免的。简而言之,如果您打算使用 Identity,则不能将数据库完全排除在 MVC 应用程序之外。要完全依赖 Web Api,您基本上必须构建自己的身份验证系统。或者,您可能会找到一个可以使用 Web Api 的第三方系统。不过,身份是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 2019-06-21
    • 2013-08-19
    • 2017-11-21
    • 1970-01-01
    • 2016-01-22
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多