如何实现OAuth登录

OAuth是一种授权框架,用于向第三方应用程序提供访问资源的安全方法,此方法不需要向第三方应用程序提供用户名和密码。

OAuth基础原理

OAuth主要分为三个角色:客户端、授权服务器、资源服务器。

角色

说明

客户端(Client)

需要访问资源的应用程序,如低代码平台魔笔。

授权服务器(Authorization Server)

管理用户身份验证和授权,并向客户端发放访问令牌。

资源服务器(Resource Server)

存储受保护的资源,并使用令牌来验证客户端的身份。

一个简单的OAuth 2.0时序图的交互流程如下图所示:

image

在这个时序图中,ResourceOwner向Client发送请求,Client将请求发送给AuthorizationServer,AuthorizationServer引导ResourceOwner进行身份验证,然后发放访问令牌给Client。Client使用访问令牌访问ResourceServer,并返回请求的资源给ResourceOwner。

操作步骤

步骤1:查找对应的OAuth系统文档

首先需要查找对应的OAuth系统文档,如Google OAuth、Facebook OAuth等。确定需要的参数,如clientId等,并创建对应的数据模型。要注意保护clientId和clientSecret等敏感信息。

步骤2:搭建发起OAuth逻辑流

  1. 在魔笔低代码平台的工作台中,单击逻辑流image > 添加逻辑流。在弹出的对话框中,根据业务设置逻辑流相关参数,具体操作请参见编排逻辑流

  2. 在OAuth逻辑流中,需拼接跳转的URL,并将用户跳转到OAuth提供方的网站。

说明
  • 在跳转URL中,需要包含应用程序的clientId、回调URL等参数。

  • 对于不同的OAuth提供方,其授权流程可能存在差异。

步骤3:处理回调逻辑

  1. 在用户完成OAuth提供方的身份验证后,会返回到低代码平台,并携带一个授权码(authToken)。

  2. 配置页面。

    1. 您需要配置页面路由指向回跳页面,配置页面路由的方式请参见通过页面路由交互

    2. 在页面添加事件,选择调用后端逻辑流,并添加后端逻辑流,具体操作请参见编排逻辑流

      此操作用于解析URL中的authToken,并向OAuth提供方换取openId。如下图所示:

      image
      说明

      要注意安全问题,不能将authToken泄露给未授权的人。为了确保安全,建议在回调URL中包含一个随机字符串或验证码。

步骤4:调用三方登录Action

换取对应的openId后,在逻辑流中调用第三方用户登录Action完成魔笔系统的登录。

说明

调用三方登录Action时,需要传递平台类型、openId等参数。

image

安全注意点

不应该将三方密钥暴露给前端

OAuth提供的授权码是一个敏感的信息,不应该将其暴露给前端。如果OAuth提供方不支持将授权码传递给后端,可以考虑使用代理服务器或中间件将授权码传递给后端。此外,要注意保护clientId和clientSecret等敏感信息。

注意回调URL可能会被攻击

回调URL可能会被攻击,导致攻击者获得授权码并访问受保护的资源。为了避免这种情况,可以采取以下措施:

  • 对回调URL进行验证。在OAuth提供方注册回调URL时,可以设置验证规则,只有满足这些规则的回调URL才会被接受。

  • 使用HTTPS协议。HTTPS可以确保传输过程中的安全性,并避免中间人攻击和窃听攻击。

  • 使用随机数和验证码等措施。这些措施可以有效防止CSRF攻击和机器人攻击。

  • 做好防火墙和安全组的配置。可以通过配置防火墙和安全组,限制只有在特定条件下才可以访问OAuth提供方的API。此外,需要及时更新安全组和防火墙规则以应对新的安全威胁。

注意模型和逻辑流的调用权限设置

  • 在低代码开发平台魔笔中,逻辑流是由多个操作组成的。操作是实现逻辑的最小单位,可以理解为函数。在逻辑流调用三方登录Action时,需要注意对调用操作的访问权限进行设置,以保证安全性。

  • 建议在逻辑流中添加访问控制机制,可以使用魔笔的权限管理模块进行配置。权限管理模块可以实现对逻辑流的授权访问,可以控制哪些用户、角色或组织可以访问逻辑流。

  • 为了确保安全性,建议在调用三方登录Action时,仅授权给必要的用户或角色。在用户退出登录后,建议自动将访问令牌删除。

其他安全注意事项

在使用OAuth时,还需要注意以下事项:

  • 在客户端存储令牌时,需要采取一定的安全措施,如加密存储或使用安全的存储库。

  • 不应该存储OAuth提供方返回的敏感信息,如密码或社交安全号码等。

  • 对于具有多个客户端的OAuth提供方,应该为每个客户端分配不同的clientId和clientSecret,以提高安全性。

  • 应该定期审查OAuth提供方的访问权限,并及时撤销不再需要的权限。