跳到主要内容

安全

本文内容

概述

身份验证

授权

多租户

本文简要介绍如何在 SnapDevelop 中配置应用程序认证和授权。

概述

您可以右键点击设计器项目,然后选择 安全 菜单,在 安全 选项卡上启用身份验证和授权。

对于身份验证,当前您可以选择使用 JWT 内部认证、JWT 外部认证、或者 API Key 认证。

  • JWT 内部认证:内置 Token 生成与验证机制,需配置登录和获取用户信息 API。适合应用内快速启用身份验证。
  • JWT 外部认证:依赖外部认证服务(如 Azure AD),需绑定外部提供的登录与用户信息 API。适合企业己有统一认证中心,复用外部认证服务。
  • API Key:使用固定的 Key 进行验证,简单易用,但安全性依赖传输层(HTTPS)保护。适合测试环境或无需复杂认证的外部 API。

对于授权,您可以选择使用默认策略(JWT授权策略)或匿名策略。在启用授权后,所有 API 都会自动使用默认策略,您可以在 API 设置页面中为每个 API 选择不同的授权策略。

身份验证

1. JWT 内部认证

当选择 内部 模式,并将 认证方式 设置为 JWT 时,系统会使用系统内置的 JWT 认证机制来进行身份验证。

  • 登录 API 指定用户登录接口,例如 Login,用于验证用户名和密码并生成 JWT Token。

  • 获取用户信息 API 指定一个接口,例如 GetUserInfo,用于在验证 Token 后返回用户信息。

  • 算法 支持选择如 HS256HS384HS512 等常见 JWT 签名算法。

  • 密钥

    用于签发和验证 Token 的密钥,可以随机生成。

    原始:密钥的二进制形式,适用于内部计算机系统处理。

    Base64 编码:将二进制密钥转换为文本格式,便于通过文本协议传输或存储。

  • 过期时间

    设置 Token 的有效期,例如2小时。

  • 添加位置

    请求头 请求头名称:指定哪个字段用于传递特定信息,默认值为 Authorization。 请求头前缀:附加在字段值前的标识符,默认值为 Bearer。

    查询参数 查询参数名称:URL 中 ? 后面的参数名,通常用于在 GET 请求中传递数据。

image-20250928094528454

2. JWT 外部认证

当选择 外部 模式,并将 认证方式 设置为 JWT 时,系统不会内置管理登录和用户信息接口,而是通过第三方或外部服务来处理用户认证。

  • 登录 API 指定外部提供的用户登录接口。系统会调用这个接口来生成 Token。

  • 获取用户信息 API 指定外部提供的接口,用于验证 Token 并获取用户信息。

与内部模式类似,可以配置 Token 的传递方式(请求头或查询参数)。

使用场景

  • 适合企业己有统一认证中心(如 Microsoft Entra ID/Azure AD)的情况。
  • 允许 PowerServer 复用现有的外部身份认证服务。

image-20250928102421549

3. API Key 认证

当选择 外部 模式,并将 认证方式 设置为 API Key 时,系统通过在请求中传递固定的键值对来进行身份验证。

  • 指定 API Key 的字段名称,默认值为 X-API-Key,可自定义。

  • 配置 API Key 的具体值。客户端必须在请求中提供相同的值。

  • 添加位置

    将API Key放在请求头(请求的HTTP头部,以保证请求安全)或者查询参数(URL的查询参数,便于在GET请求中传递)。

使用场景

  • 快速接入和测试。
  • 适合无需复杂认证流程的外部 API。
  • 建议在生产环境中始终配合 HTTPS,以防止 Key 泄露。

image-20250928102454032

启用身份验证后,系统会自动创建以下视图文件,用来实现与身份验证相关的界面和逻辑:

  1. Login.sdv:该文件用于实现用户登录界面,用户在此界面输入他们的凭据(如用户名和密码),并提交以进行身份验证。
  2. Register.sdv:该文件用于用户注册界面,允许新用户创建一个帐户,输入必要的注册信息,并提交到服务器。
  3. Setting.sdv:该文件用于实现用户退出登录界面。

这些视图文件通过预设的模板和逻辑,帮助开发者快速实现身份验证相关功能,而无需手动创建这些界面。

image-20250928103422619

启用身份验证(授权及多租户)后,表达式设计器中的相关认证函数将可选。

image-20250928135859949

启用身份验证后,在生成项目时将生成 Identity 项目,并添加身份数据库配置,用于将持久化数据存储在数据库中。 您可以打开 生成配置 页面来查看数据库配置。

image-20250928105043607

授权

在项目安全页中可以选择 启用授权 选项(只有启用 JWT内部认证时可以设置)。

授权策略用于配置应用程序的授权策略,目前只能支持使用默认授权策略(JWT授权策略)或者使用匿名策略。

多租户

在项目安全页中可以选择 启用多租户支持 选项(只有启用 JWT内部认证时可以设置),用于多租户场景下的隔离与管理。

代码预览

ICurrentTenant:租户接口

img

ITenantProvider:租户提供者接口

kimg

IdentityCurrentTenant:当前租户默认实现类

img

MultiTenantMiddleware:多租户中间件

img

UseMultiTenantMiddleware():多租户中间件的扩展方法

img

从当前租户上获取数据库连接字符串和使用多租户中间件。

img