使用Oauth2的网络身份,一旦用户通过发布用户名和密码进行身份验证,就会创建令牌。
在从一个API调用一个动作之前,用户必须请求一个令牌:
http://mysite/auth/token
一旦接收到令牌,所有Web Api调用都可以完成,发送
Authorization: Bearer <token>
header:
GET http://mysite/auth/product/1
PUT http://mysite/auth/client/42
我有几个使用集中安全系统进行身份验证的Web api,问题是,当我尝试调用不同的Api(使用不同的URL)时,我收到未经授权的(401)。例如:
GET http://mysite/myapi/product/1
如果安全性是集中的,并且两个api都使用相同的用户数据库进行身份验证,我如何对不同的url使用相同的令牌?
最后,我找到了在两个Web中添加相同的machineKey标记的解决方案。配置文件:
<system.web>
...
<machineKey validationKey="57B449BBA8F9E656087FF7848727E122C5F5966F65AC0FC25FB3532193B59CFCD13B370883FFC184C1F1500638F33E6F67B37CAED1D9BC65BBC6CFFB232BFD0B" decryptionKey="6D9FBE88D16B3FA5B5E6B37460BBE50DA85D5B4C482159006B5A337C58AA9E79" validation="SHA1" decryption="AES" />
...
</system.web>
在这里使用machineKey生成器接受的答案。
来自文档:
跨应用程序共享身份验证票据
如果您需要一次登录来跨位于不同位置的多个应用程序工作虚拟目录,您需要共享一个共同的身份验证票据。要配置公共身份验证票据,必须手动配置生成validationKey和decryptionKey值,并确保每个应用程序共享这些值。如果你想共用门票的话在服务器上的所有应用程序中,都可以设置这些手动值元素在机器级Web中。配置文件。分享跨特定应用程序的门票,可以使用元素中具有公共validationKey和decryptionKey值相关应用程序的Web。配置文件。
更新-安全警告
安全警告
有很多网站会为你只需按一下按钮。永远不要使用你从其中一个网站获得的信息。不可能知道是否这些密钥是安全创建的,或者它们是否被记录到秘密数据库。您应该只使用配置您自己创建的元素。
阅读附录A的链接,了解如何生成自己的machineKey元素