错误401未经授权。如何为不同的URL使用相同的令牌?

时间:2014-08-18 10:32:16

标签: asp.net authentication oauth-2.0 asp.net-identity asp.net-web-api2

在使用Oauth2的ASP.Net Identity中,一旦用户通过身份验证发布用户和密码,就会创建一个令牌。

在从一个API调用操作之前,用户必须要求提供令牌:

http://mysite/auth/token

收到令牌后,可以完成所有Web Api呼叫,发送

Authorization: Bearer <token>标题:

GET http://mysite/auth/product/1
PUT http://mysite/auth/client/42

我有几个使用集中式安全系统进行身份验证的Web Apis, 问题是当我尝试调用不同的Api(使用不同的URL)时,我收到Unauthorizaed(401)。例如:

GET http://mysite/myapi/product/1

如果安全性是集中式的,并且两个API都使用相同的用户数据库进行身份验证,那么如何为不同的URL使用相同的令牌?

1 个答案:

答案 0 :(得分:1)

最后,我发现解决方案在两个Web.config文件中添加了相同的 machineKey 标记:

<system.web>
...
<machineKey validationKey="57B449BBA8F9E656087FF7848727E122C5F5966F65AC0FC25FB3532193B59CFCD13B370883FFC184C1F1500638F33E6F67B37CAED1D9BC65BBC6CFFB232BFD0B" decryptionKey="6D9FBE88D16B3FA5B5E6B37460BBE50DA85D5B4C482159006B5A337C58AA9E79" validation="SHA1" decryption="AES" />
...
</system.web>

使用machineKey生成器在接受的答案here上建议。

来自documentation

  

跨应用程序共享身份验证票据
  如果您需要单个登录才能跨越多个位于不同的应用程序   在虚拟目录中,您需要共享一个通用的身份验证票证。   要配置通用身份验证票证,您必须手动配置   生成validationKey和decryptionKey值并确保每个值   应用程序共享这些值。如果你想分享门票   您可以在服务器上的所有应用程序上设置这些手动值    机器级Web.config文件中的元素。分享   特定应用程序的票证,您可以使用   元素中包含常见的validationKey和decryptionKey值   相关应用程序的Web.config文件。

已更新 - 安全警告

  

安全警告

     

有许多网站会为其生成元素   你点击一下按钮就可以了。永远不要使用那个元素   您从其中一个网站获得。无法知道是否   这些密钥是安全创建的,或者如果它们被记录到一个   秘密数据库。您应该只使用配置   你自己创造的元素。

阅读link上的附录A,了解如何生成自己的machineKey元素。