使用 Express.js 进行 OAuth 和推送
Posted
技术标签:
【中文标题】使用 Express.js 进行 OAuth 和推送【英文标题】:OAuth and Push with Express.js 【发布时间】:2016-01-28 07:38:57 【问题描述】:我正在尝试使用 Express.js 构建 REST 服务器。服务器将被移动本地客户端以及 html/JS Web 客户端使用。我希望 HTML/JS Web 客户端仅作为静态文件提供,并且将使用 REST api 进行交互。
我有两个问题: 1) 如何将 OAuth2 身份验证集成到服务中,以便我可以使用 Facebook、Google 等登录。我希望移动客户端和 Web 客户端使用相同的 API 集。 2) 如何向移动客户端发送推送通知?专门针对 Apple 移动客户端。
谢谢。
【问题讨论】:
npmjs.com/package/node-oauth2-server 【参考方案1】:对于移动客户端,他们通常会使用他们的移动 SDK 从 OAuth 提供商(例如 google)请求访问令牌等。
然后他们会向您发送此访问令牌。您可以采取两种方式 - 使用提供者访问令牌直接验证每个请求(可以,但不那么健壮)或使用提供者访问令牌向移动应用授予您自己的身份验证令牌(或会话、cookie 等)您可能正在使用)。
我认为第二种方式更通用。
怎么做呢? Passport.js
有一些模块,比如谷歌。通常它们会在您的应用中插入一些端点,例如:
/auth/google
和
/auth/google/callback
现在,第一个通常用于在您的 Web 或移动 Web 项目上启动外部身份验证过程。 callback
网址是他们稍后使用访问令牌访问您的位置 - 这就是您将在您的移动应用程序中使用的 - 他们获取令牌,然后点击您的 /auth/:provider/callback
端点。
【讨论】:
Zlatko,还有一个问题。移动客户端应如何使用 REST API 传递身份验证令牌?应该使用哪些参数/标题?另外,重定向 url 在提供者端是否应该是“/auth/:provider/callback”? 嗯。实际上,这是几个问题。 1. 将令牌作为查询参数传递。例如:https://your-api.com/auth/google/callback?code=<authorization-code-you-got-from-google>
2. 这意味着它命中了你的 API。您可以将code
更改为auth_token
或其他任何内容。您可以使用 post 代替 get。但是上面的形式是被passport.js和passport-google开箱即用的。以上是关于使用 Express.js 进行 OAuth 和推送的主要内容,如果未能解决你的问题,请参考以下文章
使用 Passport.js 的 Vue.js 客户端和 Express.js 服务器的完整 Oauth2 身份验证流程
Passport.js 在 nginx 上表达 google oauth 502 Bad Gateway
使用 Twitter 搜索 API 的位置和 OAuth 问题
ExpressJS Node.js Angular 错误:获取 OAuth2 API 授权令牌时出现 getaddrinfo ENOTFOUND