我想使用ASP。NET标识,该标识是使用MVC5在前端通过物理分离的业务逻辑服务器设置的。BL服务器是唯一可以直接访问DB服务器的服务器。
为了设置这个,我想我可以走两条路之一:
- 使用ASP。NET标识,但使用自定义IUser*Store来调用Web API,而不是直接调用DB。Web API将在BL服务器上运行并实现数据访问(EF)
- 使用ASP。NET标识,但让它提供DTO(实际上,只是传递给视图的模型)。MVC层将使用ViewModels中的数据调用Web API,然后Web API将返回传递给Views的模型(MVC层实际上只是传递)。我可能会使用一个与ViewModel略有不同的DTO,然后让MVC层创建ViewModel,但它不会改变整体点
我认为第一个选项可能更干净,但我如何在后端Web API上使用声明授权?我想把它当作一种象征吗?谁生成它,我如何让Web API使用它(也就是说,从头中取出access_token并创建ClaimsPrincipal)?
我对第二个选项的担忧是,它没有直接登录调用,只有令牌支持,所以我不知道我是否仍然可以用同样的方式管理用户的登录状态,或者我是否应该这样做(我需要完全访问常规用户管理内容,如更改密码、双因素、锁定帐户等)
如有任何关于采取正确方法的指导,我们将不胜感激。
我最终选择了选项1。我从IUser*Store实现中调用Web API。
我通过使用IdentityServer发出access_token解决了ClaimsPrincipal问题。Web API可以轻松地使用这些令牌,并为我构建ClaimsPrincipal,然后我可以随心所欲地使用这些声明。在我的情况下,我使用AuthorizationManager进行集中访问检查。
我希望这能有所帮助!