授权服务器,Oauth2和auth0

时间:2020-03-11 11:23:02

标签: authentication oauth-2.0 jwt authorization auth0

我有一些问题,因为我不太了解如何实现身份验证流程
阅读一些文档,我发现下面的图像 enter image description here

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

我有一个项目,其中前端是有角度的,后端是node.js koa,在其前面有微服务架构和网关。 我可以将 auth0 oauth2 授权服务器一起使用,并将用户存储在内部吗?

如何?在auth0文档中有大量的说明,我不明白这对我来说是正确的。

我必须通过网关拦截登录注销注册并重定向到auth0,否则我必须在用户微服务中执行此操作?

在我的项目中还有个人信息表和公司表的情况下,用户表是否有意义?

以这种方式为我所有公司项目提供授权服务器 sso 吗?

我可以添加外部公司sso吗?

我可以添加Google登录吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以按照Auth0 Angular快速入门来实施您的方案。它准确地显示了分步实施。 https://auth0.com/docs/quickstart/spa/angular2/01-login

在体系结构级别,您正在执行以下操作:

  1. 前端应用程序(角度)使用auth0-spa-js来实现Authorization Code flow + PKCE来实现登录流程。它仅执行用户身份验证并获得请求API范围的令牌。要请求API权限,请在启动登录流程时添加Audience参数。
  2. 获取令牌后,访问令牌可用于调用后端API。
  3. 在后端服务器中,您应该实现API授权(它会验证访问令牌并检查令牌是否具有必要的作用域/权限)。 https://auth0.com/docs/quickstart/backend/nodejs/01-authorization

以上API授权快速入门使用快速中间件。这篇博客文章解释了如何在koa中执行相同的操作。 https://auth0.com/blog/building-and-securing-a-koa-and-angular2-app-with-jwt/

答案 1 :(得分:0)

对于您特定的组织案例,您有一个非常广泛的体系结构实施问题。

我建议您遵循下面的用户管理模型 使用NodeJS + Koa + Passport组合进行身份验证,注册和用户管理的简单API。

您可以将API部署到Heroku并使用Postman测试API。

您可以使用NodeJS全局错误处理程序中间件,而不必实现任何冗余的本地错误处理程序。

作为最佳实践,请使用节点JWT中间件,该中间件在允许访问API之前检查从客户端从http请求中接收的JWT令牌是否有效,如果该令牌无效,则会向该服务器发送“ 401未经授权”响应客户。可以在您的微服务之前在网关级别本身上完成此JWT API授权。

最后,Koa + Passport用户服务包含用于用户身份验证的核心业务逻辑,并在节点api中使用Koa-Redis进行会话管理,它封装了与猫鼬用户模型的所有交互并公开了一组简单的方法通过用户控制器。

Moroever Koa + Passport支持使用OpenID和OAuth的单点登录,它可以回答您与SSO相关的其他问题。

在这里,您也已经发现KOA最适合微服务,因为您已经选择了相同的服务。使用相同的基础架构覆盖身份验证+用户管理将被证明是非常通用且可扩展的。

https://mherman.org/blog/user-authentication-with-passport-and-koa/

为了连接到外部SSO提供程序,您可以按以下方式使用nodejs oauth2客户端api,该API可让您连接节点后端以连接到外部SSO服务器。

https://www.npmjs.com/package/client-oauth2

对于使用Google / Gmail的SSO,最好使用google提供的基于SAML的SSO。

安全性声明标记语言(SAML)是用于两个实体(服务提供者和身份提供者)之间进行身份验证和授权的基于XML的框架。服务提供商同意信任身份提供商对用户进行身份验证。作为回报,身份提供者会生成一个验证声明,该声明表明用户已通过验证。

SAML是一种标准的单点登录(SSO)格式。认证信息通过数字签名的XML文档进行交换。这是一个复杂的单点登录(SSO)实施,可实现无缝验证,主要是在企业之间。

下面的链接提供了有关如何从您的应用程序向Google设置SAML / SSO服务的详细信息。

https://support.google.com/a/answer/6087519?hl=en

相关问题