OAuth是一种授权框架,用于向第三方应用程序提供访问资源的安全方法,此方法不需要向第三方应用程序提供用户名和密码。
OAuth基础原理
OAuth主要分为三个角色:客户端、授权服务器、资源服务器。
角色 | 说明 |
客户端(Client) | 需要访问资源的应用程序,如低代码平台魔笔。 |
授权服务器(Authorization Server) | 管理用户身份验证和授权,并向客户端发放访问令牌。 |
资源服务器(Resource Server) | 存储受保护的资源,并使用令牌来验证客户端的身份。 |
一个简单的OAuth 2.0时序图的交互流程如下图所示:
在这个时序图中,ResourceOwner向Client发送请求,Client将请求发送给AuthorizationServer,AuthorizationServer引导ResourceOwner进行身份验证,然后发放访问令牌给Client。Client使用访问令牌访问ResourceServer,并返回请求的资源给ResourceOwner。
操作步骤
步骤1:查找对应的OAuth系统文档
首先需要查找对应的OAuth系统文档,如Google OAuth、Facebook OAuth等。确定需要的参数,如clientId等,并创建对应的数据模型。要注意保护clientId和clientSecret等敏感信息。
步骤2:搭建发起OAuth逻辑流
在魔笔低代码平台的工作台中,单击逻辑流 > 添加逻辑流。在弹出的对话框中,根据业务设置逻辑流相关参数,具体操作请参见编排逻辑流。
在OAuth逻辑流中,需拼接跳转的URL,并将用户跳转到OAuth提供方的网站。
在跳转URL中,需要包含应用程序的clientId、回调URL等参数。
对于不同的OAuth提供方,其授权流程可能存在差异。
步骤3:处理回调逻辑
在用户完成OAuth提供方的身份验证后,会返回到低代码平台,并携带一个授权码(authToken)。
配置页面。
步骤4:调用三方登录Action
换取对应的openId后,在逻辑流中调用第三方用户登录Action完成魔笔系统的登录。
调用三方登录Action时,需要传递平台类型、openId等参数。
安全注意点
不应该将三方密钥暴露给前端
OAuth提供的授权码是一个敏感的信息,不应该将其暴露给前端。如果OAuth提供方不支持将授权码传递给后端,可以考虑使用代理服务器或中间件将授权码传递给后端。此外,要注意保护clientId和clientSecret等敏感信息。
注意回调URL可能会被攻击
回调URL可能会被攻击,导致攻击者获得授权码并访问受保护的资源。为了避免这种情况,可以采取以下措施:
对回调URL进行验证。在OAuth提供方注册回调URL时,可以设置验证规则,只有满足这些规则的回调URL才会被接受。
使用HTTPS协议。HTTPS可以确保传输过程中的安全性,并避免中间人攻击和窃听攻击。
使用随机数和验证码等措施。这些措施可以有效防止CSRF攻击和机器人攻击。
做好防火墙和安全组的配置。可以通过配置防火墙和安全组,限制只有在特定条件下才可以访问OAuth提供方的API。此外,需要及时更新安全组和防火墙规则以应对新的安全威胁。
注意模型和逻辑流的调用权限设置
在低代码开发平台魔笔中,逻辑流是由多个操作组成的。操作是实现逻辑的最小单位,可以理解为函数。在逻辑流调用三方登录Action时,需要注意对调用操作的访问权限进行设置,以保证安全性。
建议在逻辑流中添加访问控制机制,可以使用魔笔的权限管理模块进行配置。权限管理模块可以实现对逻辑流的授权访问,可以控制哪些用户、角色或组织可以访问逻辑流。
为了确保安全性,建议在调用三方登录Action时,仅授权给必要的用户或角色。在用户退出登录后,建议自动将访问令牌删除。
其他安全注意事项
在使用OAuth时,还需要注意以下事项:
在客户端存储令牌时,需要采取一定的安全措施,如加密存储或使用安全的存储库。
不应该存储OAuth提供方返回的敏感信息,如密码或社交安全号码等。
对于具有多个客户端的OAuth提供方,应该为每个客户端分配不同的clientId和clientSecret,以提高安全性。
应该定期审查OAuth提供方的访问权限,并及时撤销不再需要的权限。