在本快速入门中,你将使用示例 Web 应用来演示如何使用Microsoft标识平台保护 ASP.NET Web API。 此示例使用 Microsoft身份验证库(MSAL) 来处理身份验证和授权。
- 拥有有效订阅的 Azure 帐户。 创建账户。
- 在 Microsoft Entra 管理中心 注册新应用,并从“应用 概述 ”页记录其标识符。 要了解更多信息,请参见注册应用程序。
- 名称: NewWebAPI1
- 支持的帐户类型: 仅限于此组织目录中的帐户(单一租户)
注册 API 后,可以通过定义 API 向客户端应用程序公开的范围来配置其权限。 客户端应用程序通过将访问令牌及其请求传递到受保护的 Web API 来请求执行操作的权限。 然后,仅当 Web API 接收的访问令牌包含所需范围时,Web API 才会执行请求的操作。
API 需要发布至少一个范围(也称为 委派权限),客户端应用才能成功获取用户的访问令牌。 若要发布范围,请执行以下步骤:
从“应用注册”页中,选择创建的 API 应用程序 (ciam-ToDoList-api) 以打开其“概述”页。
在“管理”下,选择“公开 API” 。
在页面顶部的“应用程序 ID URI”旁边,选择“添加”链接以生成对此应用来说独一无二的 URI。
接受建议的应用程序 ID URI,例如
api://{clientId}
,然后选择“保存”。 当您的 Web 应用在请求 Web API 的访问令牌时,会将该 URI 添加为 API 每个定义范围的前缀。在“此 API 定义的范围”下选择“添加范围”。
输入以下值,用于定义对 API 的读取访问权限,然后选择添加范围以保存更改:
资产 价值 范围名称 ToDoList.Read 谁可以许可 仅管理员 管理员同意显示名称 使用“ToDoListApi”读取用户待办事项列表 管理员同意说明 允许应用使用“TodoListApi”读取用户的待办事项列表。 国家 已启用 再次选择添加范围,然后输入定义对 API 的读取和写入访问权限范围的以下值。 选择 “添加范围 ”以保存更改:
资产 价值 范围名称 ToDoList.ReadWrite 谁可以许可 仅管理员 管理员同意显示名称 使用“ToDoListApi”读取和写入用户 ToDo 列表 管理员同意说明 允许应用使用“ToDoListApi”读取和写入用户的 ToDo 列表 国家 已启用
详细了解 Web API 的发布权限时的最小特权原则。
API 需要为应用程序发布至少一个应用角色(也称为 应用程序权限),客户端应用才能自行获取访问令牌。 应用程序权限是 API 想要使客户端应用程序能够成功地以自己的身份进行身份验证(无需让用户登录)时应发布的权限类型。 若要发布应用程序权限,请执行下列步骤:
从“应用注册”页中,选择创建的应用程序(例如 ciam-ToDoList-api)以打开其“概述”页。
在“管理”下,选择“应用角色”。
选择“创建应用角色”,输入以下值,然后选择“应用”以保存更改:
资产 价值 显示名称 ToDoList.Read.All 允许的成员类型 应用程序 价值 ToDoList.Read.All DESCRIPTION 允许应用使用“TodoListApi”读写每个用户的待办事项列表 要启用此应用角色吗? 保持选中状态 再次选择“创建应用角色”,为第二个应用角色输入以下值,然后选择“应用”以保存更改:
资产 价值 显示名称 ToDoList.ReadWrite.All 允许的成员类型 应用程序 价值 ToDoList.ReadWrite.All DESCRIPTION 允许应用使用“ToDoListApi”读写每个用户的 ToDo 列表 要启用此应用角色吗? 保持选中状态
若要获取示例应用程序,可以从 GitHub 克隆它或将其下载为 .zip 文件。
git clone https://github.com/Azure-Samples/ms-identity-ciam-dotnet-tutorial.git
- 下载 .zip 文件。 将其解压缩到名称长度少于 260 个字符的文件路径。
配置代码示例以匹配已注册的 Web API。
在 IDE 中,打开包含示例的项目文件夹 ms-identity-ciam-dotnet-tutorial/2-Authorization/3-call-own-api-dotnet-core-daemon/ToDoListAPI。
打开
appsettings.json
文件,其中包含以下代码片段:{ "AzureAd": { "Instance": "Enter_the_Authority_URL_Here", "TenantId": "Enter_the_Tenant_Id_Here", "ClientId": "Enter_the_Application_Id_Here", "Scopes": { "Read": ["ToDoList.Read", "ToDoList.ReadWrite"], "Write": ["ToDoList.ReadWrite"] }, "AppPermissions": { "Read": ["ToDoList.Read.All", "ToDoList.ReadWrite.All"], "Write": ["ToDoList.ReadWrite.All"] } }, "Logging": {...}, "AllowedHosts": "*" }
查找以下值:
ClientId
- 应用程序的标识符,也称为客户端。 将引号中的value
文本替换为先前从注册应用程序的“概述”页中记录的应用程序(客户端)ID。TenantId
- 应用程序注册所在租户的标识符。 将引号中的value
文本替换为注册应用程序“概述页”中先前记录的 目录(租户)ID 值。Instance
- 它指定Microsoft身份验证库(MSAL)可从中请求令牌的目录。 根据您的情况,将Enter_the_Authority_URL_Here
替换为以下任一值:- 对于员工租户,请使用
https://login.partner.microsoftonline.cn/
作为实例。
- 对于员工租户,请使用
从 Web API 项目目录的根目录运行以下命令以启动应用:
dotnet run
如果一切正常,终端将显示如下所示的输出:
Building... info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:{port} info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development ...
记录
https://localhost:{port}
URL 中的端口号。若要验证终结点是否受保护,请更新下面的 cURL 命令中的基 URL 以匹配在上一步中收到的终结点,然后运行该命令:
curl -k -X GET https://localhost:<your-api-port>/api/todolist -w "%{http_code}\n"
预期响应为 401 未授权。
了解如何使用Microsoft标识平台保护 ASP.NET Core Web API。