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

了解如何生成一个本机应用,该应用使经过 AD FS 2019 进行身份验证的用户登录,并使用 MSAL 库获取令牌来调用 Web API。

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

概述

概述

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

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

先决条件

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

AD FS 中的应用注册

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

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

  2. 在应用程序组向导中,对于“名称”,输入“ebApiToWebApi”,并在“客户端-服务器应用程序”下选择“访问 Web API 的本机应用程序”模板。 单击“下一步”。

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

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

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

  4. 在“配置 Web API”屏幕上,输入标识符:https://localhost:44321/. 单击 添加。 单击“下一步”。 稍后将在应用程序的 App.config 和 Web.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 流和应用程序方案