在使用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使用相同的令牌?
答案 0 :(得分:1)
最后,我发现解决方案在两个Web.config文件中添加了相同的 machineKey 标记:
<system.web>
...
<machineKey validationKey="57B449BBA8F9E656087FF7848727E122C5F5966F65AC0FC25FB3532193B59CFCD13B370883FFC184C1F1500638F33E6F67B37CAED1D9BC65BBC6CFFB232BFD0B" decryptionKey="6D9FBE88D16B3FA5B5E6B37460BBE50DA85D5B4C482159006B5A337C58AA9E79" validation="SHA1" decryption="AES" />
...
</system.web>
使用machineKey生成器在接受的答案here上建议。
跨应用程序共享身份验证票据
如果您需要单个登录才能跨越多个位于不同的应用程序 在虚拟目录中,您需要共享一个通用的身份验证票证。 要配置通用身份验证票证,您必须手动配置 生成validationKey和decryptionKey值并确保每个值 应用程序共享这些值。如果你想分享门票 您可以在服务器上的所有应用程序上设置这些手动值 机器级Web.config文件中的元素。分享 特定应用程序的票证,您可以使用 元素中包含常见的validationKey和decryptionKey值 相关应用程序的Web.config文件。
已更新 - 安全警告
安全警告
有许多网站会为其生成元素 你点击一下按钮就可以了。永远不要使用那个元素 您从其中一个网站获得。无法知道是否 这些密钥是安全创建的,或者如果它们被记录到一个 秘密数据库。您应该只使用配置 你自己创造的元素。
阅读link上的附录A,了解如何生成自己的machineKey元素。