授权服务器,Oauth2 和 auth0

Posted

技术标签:

【中文标题】授权服务器,Oauth2 和 auth0【英文标题】:Authorization server, Oauth2 and auth0 【发布时间】:2020-06-23 08:52:27 【问题描述】:

我有一些问题,因为我不太了解如何实现身份验证流程。 阅读一些文档,我在下面找到了图片

现在,我了解了访问令牌刷新令牌,但我认为我不了解如何实现它。

我有一个项目,前端是 angular,后端是 node.js koa,前面有微服务架构和网关。 我可以使用 auth0 之类的 oauth2 授权服务器来存储用户吗?

怎么样?在 auth0 文档中有大量说明,我不明白哪个适合我。

我必须通过网关拦截 loginlogoutsignup 并重定向到 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”

Auth0“找不到服务”错误

如何使用 REST + CodeceptJS 测试 API,访问受 Auth0 保护?