据我所知,OAuth2的目的是将授权授权委托给特定的资源,它本身就是而不是认证协议。然而,passport-github自述文件指出,
此模块允许在GitHub应用程序中使用Node.js进行身份验证。通过插入Passport,GitHub身份验证可以轻松、低调地集成... -- GitHub身份验证策略使用GitHub帐户和OAuth 2.0令牌对用户进行身份验证。
通过在我的passport-github中使用HelloAPI,最终用户将被定向到GitHub的授权服务器,以启动3条腿的authorization_code流:
redirect_uri将用户代理(浏览器)重定向回HelloAPI .重定向URI包括授权代码和可选的用于跨站点请求伪造检测的state参数。client_secret作为使用GitHub对HelloAPI进行身份验证的一种方式。(这里我也应该包含一个state参数。)在这里,我们假设令牌不是由其他客户端创建的,随后由重放给HelloAPI作为攻击来模拟GitHub资源所有者。通过检查state参数,我认为这是一个安全的假设,但https://oauth.net/articles/authentication/警告不要这样做:
OAuth API不为返回的信息提供任何受众限制机制。换句话说,很有可能获取一个天真的客户端,从另一个客户端向它传递(有效)令牌,并让天真的客户端将其视为一个“登录”事件。毕竟,令牌是有效的,对API的调用将返回有效的用户信息。当然,问题是用户没有做任何事情来证明他们的存在,在这种情况下,他们甚至没有授权这个天真的客户端。
因此,这是我在使用passport-github时的犹豫:它使用OAuth2令牌进行身份验证,这正是专家所警告的。包含state参数似乎可以保护服务器到服务器的authorization_code流,但我不确定。
我遗漏了什么?passport-github身份验证是安全的,还是有任何方法使“使用GitHub登录”功能安全?
发布于 2016-10-30 00:24:22
我不相信GitHub OAuth2实现支持您的用例来对用户进行身份验证,所以从安全性和可维护性的角度来看,我并不认为这是一个好主意。来自文档的第一段:
OAuth2是一种协议,它允许外部应用程序请求对用户GitHub帐户中的私有详细信息的授权,而无需获取他们的密码。
下面讨论的假设是,GitHub OAuth2实现中的授权代码和访问令牌对客户端是不透明的。
在GitHub场景中,我们有以下OAuth角色:
passport-github实现通过使用客户端作为OAuth2流的一部分获得的访问令牌对用户进行身份验证,然后从https://api.github.com/user的GitHub资源服务器请求用户配置文件信息。
例如:
我的问题是,没有直接的“证据”作为此过程的一部分,以确保作为GitHub流的一部分通过身份验证的身份与用于在应用程序中进行身份验证的配置文件信息中返回的标识相同。对我来说,从信息完整性的角度来看,这是一个失败,所以我不认为这是‘安全’。
由于passport-github实现似乎不是GitHub支持的身份验证场景,因此在GitHub以任何方式更改它们的实现时也会产生风险。最好使用受支持的协议,并将API用于其预期目的,以确保安全性和可维护性。
发布于 2018-05-10 05:40:09
是的,它和任何其他OAuth登录一样安全,只要您通过SSL/TLS使用安全措施,而且正如前面提到的那样,它还使用了HelloAPI,这增加了另一个级别的安全性,大多数其他OAuth登录API都不使用!通过其他网站可以使用,在做了一些阅读,它是安全的,你将获得与这种类型的登录!
https://security.stackexchange.com/questions/140595
复制相似问题