如何为Angular App实现NodeJS OAuth2?

时间:2016-04-22 21:27:28

标签: angularjs node.js authentication oauth-2.0 passport.js

我正在尝试使用NodeJS API实现资源所有者密码流,以验证我的前端Angular应用程序。

我遇到了如何实现用户如何将其凭据(用户名和密码)发送到API的问题。 The flow I know我习惯发送这些身体变量:

请求正文:

grant_type: password
username: myusername
password: mypassword
client_id: frontendApp

Obs:我不发送client_secret,因为它不重要,因为它是一个Angular应用程序,所以eveyone可以看到,但我创建了一个代表我的前端客户端的种子客户端。我还创建了一个标志,只有这个客户端(frontendApp)可以在没有client_secret的情况下进行身份验证。

当我来到NodeJS时,我一直在阅读一些关于如何在我的API中实现此流程的教程,并且我注意到我对身份验证流程必须如何发生的了解可能不是一种模式。

我选择这些工具来开始构建API的安全性:passport.js和oauth2orize。

根据教程我需要保护令牌端点。我没有理解为什么,因为用户将使用grant_type:password或grant_type:refresh_token访问它以进行身份​​验证,因此他必须在第一种情况下或刷新时向我发送用户名和密码等凭据在第二个令牌中,为什么我需要使用带有基本和客户端密码策略的passport.js?

谈论基本和客户端密码策略...再次根据教程,我应该实现两者,因为基本策略通过标头进行身份验证,而客户端Passport策略通过正文内容进行身份验证。在这里,我看到一些丑陋的东西。

就像我提到的,我没有看到保护令牌端点的理由,也许我错了,可能存在一些我没注意到的安全问题。

另一件事是因为Basic策略和Client Password有不同的上下文,第一个接收用户名和密码,第二个client_id和client_secret。当我想第一次获得访问和刷新令牌时,我必须发送所有这些东西:

请求正文:

grant_type: password
username: myusername
password: mypassword
client_id: frontendApp
client_secret: clientsecret

(or with the authentication in the header)

我不想发送client_secret,真的也不是client_id,但客户端密码策略库让我,这是非常无用的东西,因为每个人都可以查看存储它的前端代码,因为它我认为没有必要保护令牌端点。

我只想发送用户名和密码,如果用户只发送用户名和密码我已经知道它是一个尝试进行身份验证的前端客户端。我找到了explanation资源所有者密码应该如何工作,它显示了一个请求示例:

https://oauth.example.com/token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID

它使用用户名,密码和client_id显示类似我的旧版ASP.NET应用程序。

有人知道我是否应该关心它或者我可以构建它类似我的模式,因为NodeJS实现不遵循我所知道的方式。

0 个答案:

没有答案