授权服务器,Oauth2 和 auth0
Posted
技术标签:
【中文标题】授权服务器,Oauth2 和 auth0【英文标题】:Authorization server, Oauth2 and auth0 【发布时间】:2020-06-23 08:52:27 【问题描述】:我有一些问题,因为我不太了解如何实现身份验证流程。 阅读一些文档,我在下面找到了图片
现在,我了解了访问令牌和刷新令牌,但我认为我不了解如何实现它。
我有一个项目,前端是 angular,后端是 node.js koa,前面有微服务架构和网关。 我可以使用 auth0 之类的 oauth2 授权服务器来存储用户吗?
怎么样?在 auth0 文档中有大量说明,我不明白哪个适合我。
我必须通过网关拦截 login、logout 和 signup 并重定向到 auth0,否则我必须在我的用户微服务中执行此操作?
用户表在我的项目中是否有意义,其中还有个人信息表和公司表?
我公司所有项目的授权服务器sso是这样吗?
我可以添加外部公司的 SSO 吗?
我可以添加 Google 登录吗?
【问题讨论】:
【参考方案1】:您可以按照 Auth0 Angular 快速入门来实现您的场景。它准确地显示了一步一步的实施。 https://auth0.com/docs/quickstart/spa/angular2/01-login
从架构级别,您正在执行以下操作:
-
前端应用(angular)使用auth0-spa-js实现Authorization Code flow + PKCE实现登录流程。它只是执行用户身份验证并获取请求 API 范围的令牌。要请求 API 权限,请在启动登录流程时添加 Audience 参数。
获取令牌后,可使用访问令牌调用后端 API。
在后端服务器中,您应该实现API授权(它验证访问令牌并检查令牌是否具有必要的范围/权限)。 https://auth0.com/docs/quickstart/backend/nodejs/01-authorization
以上 API 授权快速入门使用 express 中间件。这篇博文解释了如何在 koa 中做同样的事情。 https://auth0.com/blog/building-and-securing-a-koa-and-angular2-app-with-jwt/
【讨论】:
【参考方案2】:对于您的特定组织案例,您有一个非常广泛的架构实施问题。
我建议您遵循以下用户管理模型 使用 NodeJS + Koa + Passport 组合进行身份验证、注册和用户管理的简单 API。
您可以将 API 部署到 Heroku 并使用 Postman 测试 API。
您可以使用 NodeJS 全局错误处理程序中间件,而不必实现任何冗余的本地错误处理程序。
作为最佳实践,在允许访问 API 之前,使用节点 JWT 中间件检查从客户端接收到的 http 请求中的 JWT 令牌是否有效,如果令牌无效,则会将“401 Unauthorized”响应发送到客户。此 JWT API 授权可以在您的微服务之前在您的网关级别本身完成。
最后,Koa + Passport 用户服务包含了用户认证的核心业务逻辑,并在 node api 中使用 Koa-Redis 进行会话管理,它封装了与 mongoose 用户模型的所有交互,并公开了一组简单的方法由用户控制器。
Moroever Koa + Passport 支持使用 OpenID 和 OAuth 进行单点登录,这可以回答您与 SSO 相关的其他问题。
您也可以在这里发现 KOA 最适合微服务,因为您已经选择了它。使用相同的基础设施覆盖身份验证 + 用户管理将被证明是非常通用和可扩展的。
https://mherman.org/blog/user-authentication-with-passport-and-koa/
为了连接到外部 SSO 提供程序,您可以使用 nodejs oauth2 客户端 api,如下所示,它允许您连接节点后端以连接到外部 SSO 服务器。
https://www.npmjs.com/package/client-oauth2
对于使用 Google/Gmail 的 SSO,最好使用 google 提供的基于 SAML 的 SSO。
安全断言标记语言 (SAML) 是一个基于 XML 的框架,用于在两个实体之间进行身份验证和授权:服务提供者和身份提供者。服务提供者同意信任身份提供者对用户进行身份验证。作为回报,身份提供者会生成一个身份验证断言,表明用户已通过身份验证。
SAML 是一种标准的单点登录 (SSO) 格式。身份验证信息通过数字签名的 XML 文档进行交换。这是一个复杂的单点登录 (SSO) 实施,可实现无缝身份验证,主要是在企业和企业之间。
以下链接详细介绍了如何将 SAML/SSO 服务从您的应用程序设置到 google。
https://support.google.com/a/answer/6087519?hl=en
【讨论】:
以上是关于授权服务器,Oauth2 和 auth0的主要内容,如果未能解决你的问题,请参考以下文章
使用 Auth0 授权来自我们的 SPA 和其他后端服务的 API 请求
基于策略的授权 - Auth0 身份验证 - 始终返回 Forbidden 403
Auth0 授权者拒绝来自服务的 JWT 令牌 - “jwt 颁发者无效。预期:https://myservice.auth0.com”