场景:调用 Web API 的本机应用

了解如何构建一个通过 AD FS 2019 进行用户身份验证的本机应用,并使用 MSAL 库 获取令牌以调用 Web API。

在阅读本文之前,应熟悉 AD FS 概念授权代码授予流

Overview

Overview

在此流中,将身份验证添加到本机应用(公共客户端),从而让用户登录并调用 Web API。 若要从登录用户的本机应用调用 Web API,可以使用 MSAL 的 AcquireTokenInteractive 令牌获取方法。 为了实现这种交互,MSAL 利用了 Web 浏览器。

为了更好地了解如何在 AD FS 中配置本机应用以交互方式获取访问令牌,让我们 使用此处 提供的示例并演练应用注册和代码配置步骤。

Pre-requisites

  • GitHub 客户端工具
  • AD FS 2019 或更高版本已配置且正在运行
  • Visual Studio 2013 或更高版本

AD FS 中的应用注册

本部分介绍如何将本机应用注册为公共客户端,将 Web API 注册为 AD FS 中的信赖方 (RP)

  1. 在“AD FS 管理”中,右键单击“应用程序组”,然后选择“添加应用程序组”。

  2. 在应用程序组向导中,对于 名称 输入 NativeAppToWebApi 并在 Client-Server 应用程序 下选择 本机应用程序访问 Web API 模板。 单击 “下一步”

    “添加应用程序组”向导的欢迎页的屏幕截图,其中突出显示了访问 Web API 模板的本机应用程序。

  3. 复制“客户端标识符”值。 稍后,它将在应用程序的 App.config 文件中用作 ClientId 的值。 为重定向 URI 输入以下内容:https://ToDoListClient. 单击 添加。 单击 “下一步”

    “添加应用程序组”向导的“本机应用程序”页面的屏幕截图,其中显示了重定向 URI。

  4. 在“配置 Web API”屏幕上,输入标识符https://localhost:44321/.: 单击 添加。 单击 “下一步” 。 此值稍后将在应用程序的 App.configWeb.config 文件中使用。

    添加应用程序组向导“配置 Web API”页的屏幕截图,其中显示了正确的标识符。

  5. 在“应用访问控制策略”屏幕上,选择“允许所有人”,然后单击“下一步”。

    添加应用程序组向导“选择访问控制策略”页的屏幕截图,其中突出显示了“允许所有人”选项。

  6. 在“配置应用程序权限”屏幕上,确保选中 openid ,然后单击“ 下一步”。

    “添加应用程序组”向导的“配置应用程序权限”页面的屏幕截图,其中显示已选中“openid”。

  7. 在“摘要”屏幕中,单击“下一步”。

  8. 在“完成”屏幕中,单击“关闭”

  9. 在 AD FS 管理中,单击 应用程序组 并选择 NativeAppToWebApi 应用程序组。 右键单击并选择“属性”

    “AD FS 管理”对话框的屏幕截图,其中突出显示了 NativeAppToWebApi 组,还显示了下拉列表中的“属性”选项。

  10. 在 NativeAppToWebApi 属性屏幕上,选择“Web API”下的“NativeAppToWebApi - Web API”,然后单击“编辑...”

    “NativeAppToWebApi 属性”对话框的屏幕截图,其中突出显示了“NativeAppToWebApi - Web API”应用程序。

  11. 在“NativeAppToWebApi - Web API 属性”屏幕上,选择“颁发转换规则”选项卡,然后单击“添加规则...”

    “NativeAppToWebApi - Web API 属性”对话框的屏幕截图,其中显示了“颁发转换规则”选项卡。

  12. 在“添加转换声明规则”向导上,从“声明规则模板:”下拉列表中选择“转换传入声明”,然后单击“下一步”。

    “添加转换声明规则”向导的“选择规则模板”页面的屏幕截图,其中显示已选中“转换传入声明”选项。

  13. 声明规则名称:字段中输入 NameID。 选择“传入声明类型的名称:”、“传出声明类型的名称 ID:”和“传出名称 ID 格式”的公用名。 单击“ 完成”。

    “添加转换声明规则”向导的“配置规则”页的屏幕截图,其中显示了上述配置。

  14. 在“NativeAppToWebApi - Web API 属性”屏幕上单击“确定”,然后单击“NativeAppToWebApi 属性”屏幕。

代码配置

本部分介绍如何配置本机应用来登录用户并检索令牌来调用 Web API

  1. 此处下载示例

  2. 使用 Visual Studio 打开示例

  3. 打开 App.config 文件。 修改以下内容:

    • ida:Authority - 输入 https://[your AD FS hostname]/adfs

    • ida:ClientId - 在上述 AD FS 部分中的应用注册中输入 #3 中的 客户端标识符 值。

    • ida:RedirectUri - 在上述 AD FS 部分中的应用注册中输入 #3 的 重定向 URI 值。

    • todo:TodoListResourceId - 在上述 AD FS 部分中的应用注册中输入 #4 的 标识符

    • ida:todo:TodoListBaseAddress - 在上面的 AD FS 部分中的应用注册中输入 #4 的 标识符 值。

      应用配置文件的屏幕截图,其中显示了修改后的值。

  4. 打开 Web.config 文件。 修改以下内容:

    • ida:Audience - 在上述 AD FS 部分中的应用注册中输入 #4 的 标识符

    • ida: AdfsMetadataEndpoint - 输入 https://[your AD FS hostname]/federationmetadata/2007-06/federationmetadata.xml

      Web 配置文件的屏幕截图,其中显示了修改后的值。

测试示例

本部分介绍如何测试上面配置的示例。

  1. 代码更改后,重新生成解决方案

  2. 在 Visual Studio 上,右键单击解决方案并选择“设置启动项目...”

    右键单击解决方案时显示的列表的屏幕截图,其中突出显示了“设置启动项目”选项。

  3. 在“属性”页上,确保将 操作 设置为 启动 以便应用到每个项目。

    “解决方案属性页”对话框的屏幕截图,其中显示已选中“多个启动项目”选项,并显示将项目的所有操作都设置为“启动”。

  4. 在 Visual Studio 顶部,单击绿色箭头。

    Visual Studio UI 的屏幕截图,其中调出了“启动”选项。

  5. 在本机应用的主屏幕上,单击“ 登录”。

    “待办事项列表客户端”对话框的屏幕截图。

如果未看到本机应用屏幕,请从系统上保存项目存储库的文件夹搜索 *msalcache.bin 文件并将其移除。

  1. 你将会重定向到 AD FS 登录页面。 继续登录。

    “登录”页的屏幕截图。

  2. 登录后,在“创建待办事项”中输入文本“将本机应用生成到 Web API”。 单击“添加项”。 这将调用待办事项列表服务 (Web API),并在缓存中添加项。

    “待办事项列表客户端”对话框的屏幕截图,其中在“待办事项”部分填充新的待办事项。

后续步骤

AD FS OpenID Connect/OAuth 流和应用程序方案