教程:在 Microsoft Entra ID 中开发示例 SCIM 终结点
本教程介绍如何使用 Azure 应用服务部署 SCIM 参考代码。 然后,通过使用 cURL 等工具或与 Microsoft Entra 预配服务集成来测试代码。 本教程适用于要开始使用 SCIM 的开发人员,或对测试 SCIM 终结点感兴趣的任何人。
在本教程中,你将了解如何执行以下操作:
- 在 Azure 中部署 SCIM 终结点。
- 测试 SCIM 终结点。
在 Azure 中部署 SCIM 终结点
此处的步骤使用 Visual Studio 2019 和 Visual Studio Code 以及 Azure 应用服务将 SCIM 终结点部署到服务。 SCIM 参考代码可以在本地运行、由本地服务器托管或是部署到另一个外部服务。 有关预配 SCIM 终结点的信息,请参阅教程:开发和规划 SCIM 终结点的预配。
获取并部署示例应用
从 GitHub 转到参考代码,然后选择“克隆或下载”。 选择“在桌面中打开”,或复制链接,打开 Visual Studio,然后选择“克隆或签出代码”以输入复制的链接并创建本地副本 。 将文件保存到文件夹,该文件夹的路径总字符长度不超过 260 个字符。
在 Visual Studio 中,确保登录有权访问托管资源的帐户。
在解决方案资源管理器中,打开 Microsoft.SCIM.sln,然后右键单击 Microsoft.SCIM.WebHostSample 文件 。 选择“发布”。
注意
若要在本地运行此解决方案,请双击项目并选择“IIS Express”以将项目作为带有本地主机 URL 的网页进行启动。 有关详细信息,请参阅 IIS Express 概述。
选择“创建配置文件”,并确保选择“应用服务”和“新建” 。
逐个完成对话框选项,并将应用重命名为你选择的名称。 此名称会在应用和 SCIM 终结点 URL 中使用。
选择要使用的资源组,然后选择“发布”。
配置应用服务
在“Azure 应用服务”>“配置”中转到应用程序,然后选择“新建应用程序设置”以添加值为 https://sts.windows.net/<tenant_id>/
的 Token__TokenIssuer 设置。 将 <tenant_id>
替换为你的 Microsoft Entra 租户 ID。
在 Microsoft Entra 管理中心使用企业应用程序测试终结点时,有两种选项。 可以将环境保留在 Development
中并提供来自 /scim/token
终结点的测试令牌,也可以将环境更改为 Production
并将令牌字段留空。
就这么简单! 你的 SCIM 终结点现在已发布,可以使用 Azure 应用服务 URL 测试 SCIM 终结点。
测试 SCIM 终结点
对 SCIM 终结点进行的请求需要授权。 SCIM 标准具有多个可用选项。 请求可以使用 Cookie、基本身份验证、TLS 客户端身份验证,或 RFC 7644 中列出的任何方法。
请确保避免使用不安全的方法(例如用户名和密码),而改用更安全的方法(例如 OAuth)。 Microsoft Entra ID 支持长期持有者令牌(适用于库和非库应用程序)和 OAuth 授权(适用于库应用程序)。
注意
存储库中提供的授权方法仅用于测试。 与 Microsoft Entra ID 集成时,可以查看授权指导。 请参阅计划 SCIM 终结点的预配。
开发环境实现了对生产不安全的功能,如控制安全令牌验证行为的参考代码。 令牌验证代码使用自签名安全令牌,签名密钥存储在配置文件中。 请查看 appsettings.Development.json 文件中的 Token:IssuerSigningKey 参数。
"Token": {
"TokenAudience": "Microsoft.Security.Bearer",
"TokenIssuer": "Microsoft.Security.Bearer",
"IssuerSigningKey": "A1B2C3D4E5F6A1B2C3D4E5F6",
"TokenLifetimeInMins": "120"
}
注意
向 /scim/token
终结点发送 GET 请求时,会使用配置的密钥颁发令牌。 该令牌可以用作持有者令牌以便进行后续授权。
默认令牌验证代码配置为使用 Microsoft Entra 令牌,需要使用 appsettings.json 文件中的 Token:TokenIssuer 参数配置颁发租户。
"Token": {
"TokenAudience": "8adf8e6e-67b2-4cf2-a259-e3dc5476c621",
"TokenIssuer": "https://sts.windows.net/<tenant_id>/"
}