保护API的推荐方法/身份验证引擎

保护API的推荐方法/身份验证引擎,api,oauth,openid,dotnetopenauth,Api,Oauth,Openid,Dotnetopenauth,您好,谢谢您的关注 背景 我正在设计一个应用程序,它将通过API为第三方网站托管某些信息/数据,并且必须通过经过身份验证的请求进行访问 OAuth是解决这个问题的方法还是有更好的方法?我不会预先知道第三方站点的域,因此我不能依赖主机头(无论如何都可能被欺骗) 对API的请求很可能来自客户端的jQuery或常规JavaScript 问题: 什么是确保从我的API请求数据的第三方网站是他们所说的,并且被允许访问他们请求的信息的最佳方式 非常感谢 MattOAuth,特别是OAuth 2(尚未定稿),

您好,谢谢您的关注

背景 我正在设计一个应用程序,它将通过API为第三方网站托管某些信息/数据,并且必须通过经过身份验证的请求进行访问

OAuth是解决这个问题的方法还是有更好的方法?我不会预先知道第三方站点的域,因此我不能依赖主机头(无论如何都可能被欺骗)

对API的请求很可能来自客户端的jQuery或常规JavaScript

问题: 什么是确保从我的API请求数据的第三方网站是他们所说的,并且被允许访问他们请求的信息的最佳方式

非常感谢


Matt

OAuth,特别是OAuth 2(尚未定稿),可能会对您非常有用。但是,由于web请求来自浏览器而不是托管这些网站的web服务器,因此每个浏览器都必须获得授权,而不是每个域

让我们退一步问这个问题:

API将公开的数据是每个用户唯一的还是每个网站域唯一的?或者换句话说,作为API所有者,您是打算以合同形式授权域访问您的数据,还是单个用户可以通过您的API访问数据,并且这些用户需要授权这些其他域访问您服务上的数据

如果您正在授权域(而不是用户),那么浏览器就不能作为这些授权请求到API的发起方。这是因为这些域上的web服务器必须向客户机颁发其密钥,此时客户机已失去对密钥的控制,任何人都可以进行这些授权调用,而不仅仅是您打算授权的域。这是安全性中的“您不能信任客户机”原则


如果您正在授权用户,则访问其中一个第三方网站的每个用户都必须进行一次性设置,网站会将其浏览器重定向到您的服务以登录并说“是,[第三方网站]可以访问我的数据”,然后将其重定向回该网站。之后,无论何时访问该站点,该站点都可以下载该用户独有的密钥,并且可以从客户端的javascript中使用该密钥来进行这些授权API调用。

OAuth,尤其是OAuth 2(尚未最终确定),可能会对您起到很好的作用。但是,由于web请求来自浏览器而不是托管这些网站的web服务器,因此每个浏览器都必须获得授权,而不是每个域

让我们退一步问这个问题:

API将公开的数据是每个用户唯一的还是每个网站域唯一的?或者换句话说,作为API所有者,您是打算以合同形式授权域访问您的数据,还是单个用户可以通过您的API访问数据,并且这些用户需要授权这些其他域访问您服务上的数据

如果您正在授权域(而不是用户),那么浏览器就不能作为这些授权请求到API的发起方。这是因为这些域上的web服务器必须向客户机颁发其密钥,此时客户机已失去对密钥的控制,任何人都可以进行这些授权调用,而不仅仅是您打算授权的域。这是安全性中的“您不能信任客户机”原则


如果您正在授权用户,则访问其中一个第三方网站的每个用户都必须进行一次性设置,网站会将其浏览器重定向到您的服务以登录并说“是,[第三方网站]可以访问我的数据”,然后将其重定向回该网站。之后,无论他们何时访问该站点,该站点都可以下载该用户独有的密钥,并可以从客户端的javascript中使用该密钥进行这些授权API调用。

感谢您的宝贵意见!数据一开始不一定以用户为中心,但理想情况下,API在未来将具有足够的灵活性。最终,我想向其他网站(客户)提供某些数据流,而不需要他们的任何特殊中间层代码。这是通过他们合并我正在开发的jQuery插件,然后将某些属性添加到他们的HTML标记中来实现的,当DOM加载后解析这些属性时,将触发对数据的ajax调用,然后将返回的数据注入HTML标记中,所以我不希望其他网站所有者使用特殊的HTML属性来调用他们不拥有的数据。希望这是有道理的。再次感谢!谢谢你的宝贵意见,安德鲁!数据一开始不一定以用户为中心,但理想情况下,API在未来将具有足够的灵活性。最终,我想向其他网站(客户)提供某些数据流,而不需要他们的任何特殊中间层代码。这是通过他们合并我正在开发的jQuery插件,然后将某些属性添加到他们的HTML标记中来实现的,当DOM加载后解析这些属性时,将触发对数据的ajax调用,然后将返回的数据注入HTML标记中,所以我不希望其他网站所有者使用特殊的HTML属性来调用他们不拥有的数据。希望这是有道理的。再次感谢!