我正在尝试在我的NodeJS服务器(用TypeScript编写)中为本地应用程序实现OAuth2代码授权流。规范的一部分要求我重定向到一个专用uri方案。然而,在ExpressJS文档中,我没有看到这样的选项。这可能吗?
更新
添加了更多细节here
4uqofj5v1#
原生应用通常会自己实现此流程。首先,在安装时向操作系统注册私有URI方案。本地应用然后打开系统浏览器并运行代码流。授权服务器通常通过在URL上返回授权代码来完成后端工作,如下图所示。然后,浏览器通知本机应用,本机应用拾取代码并完成获取令牌的流程:
x-mycompany-myapp:/callback?code=xxx&state=yyy
要了解端到端流是如何工作的,您可以运行我的code sample。
授权服务器
ExpressJS不是为实现授权服务器角色而设计的,尽管理论上可以实现。相反,使用免费的云或基于Docker的授权服务器。实现这样一个系统有许多微妙之处。
您的登录页面似乎是一个SPA,它发出 AJAX 请求来发布用户凭据。你不能重定向它,因为它会导致CORS错误。一个快速解决方法是在JSON响应有效负载中返回响应URL,然后在JavaScript中将location.href设置为该值。请注意,真实的授权服务器中的登录流是一个相当深入的主题。OAuth Threat Model中提供了一些行为。
location.href
1条答案
按热度按时间4uqofj5v1#
原生应用通常会自己实现此流程。首先,在安装时向操作系统注册私有URI方案。本地应用然后打开系统浏览器并运行代码流。
授权服务器通常通过在URL上返回授权代码来完成后端工作,如下图所示。然后,浏览器通知本机应用,本机应用拾取代码并完成获取令牌的流程:
要了解端到端流是如何工作的,您可以运行我的code sample。
授权服务器
ExpressJS不是为实现授权服务器角色而设计的,尽管理论上可以实现。相反,使用免费的云或基于Docker的授权服务器。实现这样一个系统有许多微妙之处。
更新
您的登录页面似乎是一个SPA,它发出 AJAX 请求来发布用户凭据。你不能重定向它,因为它会导致CORS错误。一个快速解决方法是在JSON响应有效负载中返回响应URL,然后在JavaScript中将
location.href
设置为该值。请注意,真实的授权服务器中的登录流是一个相当深入的主题。OAuth Threat Model中提供了一些行为。