2017-09-05 83 views
3

我正在使用预先安装的Visual Studio解决方案开发我的第一个OAuth解决方案之一。OAuth用户认证与服务器认证和访问层相结合

我的身份验证工作正常,当客户端拨打/token时,他们会得到一个不记名令牌,并且一切正常。该令牌是一个“用户级别”令牌,您可以在对服务器的每个请求中看到该令牌。这意味着我可以在只有用户应该访问的端点上添加[Authorize]

但是,与此同时,我也希望我的服务器应用程序具有“完全访问权限”。他们需要能够获得跨多个用户的列表,删除事物等等。

这里来我的问题,我以为可以很轻松地回答起来:(?API令牌)

  1. 你如何永久性标记一起管理这两个短暂的令牌(?承载令牌)
  2. 我如何在访问级别上有所不同,所以有些方法需要永久令牌?
  3. 如何在相同的方法访问级别(即典型的GET方法,当用户只应该得到“他的项目”,而管理员令牌可以得到“全”)

大概是超级简单的区别 - 而且很可能我只是不知道要在Google上搜索哪些关键字!

回答

1

这可能会被视为简单,但它涉及到很多在它的概念,将证明他们中的一些从你的问题:(?承载令牌)

1.How你同时管理短命令牌一起永久性标记(API令牌?)

一般一个网络API项目可以作为承载令牌的认证机制,但它不支持高级授权场景,如你问,所以为了适合那些需要那么你需要使用Customization of Identity model and implementation of the authorization based on the role

2.如何区分访问级别,所以有些方法需要永久令牌?

你需要创建一个Rolemanager类,你需要将它添加到Owin Context现在在Authorize可以修改属性脱俗的角色如下[Authorize(Roles="Admin")]

3.How做我访问级别不同,所以有些方法需要永久令牌?

您需要根据Role创建一个自定义的逻辑,使得用户无论是Admin与否,并根据您可以创建permanent token对于谁是有管理权限的人。我希望我的第二点解释也可以回答这个问题

4.如何在同一方法(即,典型的GET方法,当用户只应该得到“他的项目”,而令牌 管理员可以得到“全”)

基于角色的,你可以得到的all的用户列表或Single用户 这里您的理解伪代码

if (userManager.IsInRole(user.Id, "Admin")) { 

    // this roles is authorized to get the All records 

    } 
else{ 

    // Send a single record ... 
} 
+0

很好的答案 - 尽管整个事情比我想象的要复杂得多!谢谢 :-) –