我们是否应该在OAuth令牌

时间:2017-05-07 16:29:08

标签: azure oauth jwt azure-active-directory

我对OAuth令牌有所了解并在我上一个项目中使用过它。我们曾经在其中存储角色,以便资源服务器(WebAPI)不必再请求任何数据来对授权做出任何决定。虽然授权是基于权限(映射到角色)。资源服务器存储了角色和权限之间的映射。

在我当前的项目中,我们计划使用Azure Active目录。但是在这个项目中,我们需要存储一个自定义字段,该字段是所有授权模型(以及角色)的基础。虽然,在AAD(天蓝活动目录)中,您可以拥有自定义字段,但这些字段不能以声明的形式发送。 因此,一旦从客户端应用程序接收到令牌,我的资源服务器就必须为每个用户请求此字段。它显然可以将其存储在缓存中以进一步请求。但这对我来说并不自然。

我相信,授权所需的所有内容都应该是OAuth令牌的一部分。

请分享您的想法。

1 个答案:

答案 0 :(得分:0)

对于AAD并不特别,但是如果你想把所有东西保存在令牌中那么肯定你必须加密令牌。考虑到您正在加密令牌,我想到了三种方法:

  1. 简单的一个,Authz Server使用一些私人密码加密令牌。令牌到达资源服务器时,它会将令牌发送到Authz Server以进行验证和内容(Introspection API或OpenID Connect,如API)
  2. 在接下来的两种方法中,Authz Server加密令牌,RS在本地解密令牌。

    1. 注册资源服务器时,请使用资源服务器的公钥(RS具有公钥和私钥对)进行注册。 Authz Server生成随机密码以加密令牌有效负载。随机密码使用Resource Server的公钥进行交换,并添加到JWT令牌头。现在,当令牌到达RS时,它首先使用它拥有的私钥解密密码,然后使用该密码(对称密钥加密)来解密有效负载。每次需要生成新密码以确保攻击者每次都能看到新的加密字符串。

    2. 与上面类似的方法,这里当资源服务器注册(RS必须在线)时,它的公钥,Authz Server联系RS并进行SSL类型的握手,它们都交换长期会话密钥,实际上可能持续1年或更长时间(取决于您企业的安全限制)。然后,当authz服务器生成令牌时,它会使用会话密钥对其进行加密,这次它不会将会话密钥添加到令牌头。令牌转到RS,RS检查它是否有会话密钥,如果它有尝试使用相同的会话密钥解密有效载荷。为了避免错误,RS也可以存储会话密钥的有效性。