中转身份验证使用系统身份验证代理收集用户凭据,以对应用进行身份验证。 系统身份验证代理是在用户计算机上运行的应用,用于管理所有连接的帐户的身份验证握手和令牌维护。
中转身份验证具有以下优势:
- 启用单点登录(SSO): 使应用能够简化用户使用 Microsoft Entra ID 进行身份验证,并保护 Microsoft Entra ID 刷新令牌免受外泄和滥用。
- 增强的安全性: 许多安全增强功能都随中转站一起提供,无需更新应用逻辑。
- 增强的功能支持: 在代理的帮助下,开发人员可以访问丰富的 OS 和服务功能。
- 系统集成: 使用代理即插即用并内置的帐户选取器的应用程序,允许用户快速选取现有帐户,而不是一遍又一遍地重新输入相同的凭据。
- 令牌保护: 确保刷新令牌已绑定设备,并使应用能够获取设备绑定访问令牌。 有关详细信息,请参阅 令牌保护。
Windows 提供名为 Web 帐户管理器(WAM)的身份验证代理。 WAM 使标识提供者(如 Microsoft Entra ID)能够原生集成到操作系统中,并为应用程序提供安全的登录服务。 中介身份验证使应用程序能够执行交互式登录凭据允许的所有操作。
支持个人Microsoft帐户和工作或学校帐户。 在受支持的 Windows 版本中,基于浏览器的默认 UI 替换为更流畅的身份验证体验,类似于内置 Windows 应用。
macOS 本身不包括内置身份验证代理。 Azure 标识客户端库使用特定于平台的机制实现中转身份验证功能,并且可以在管理设备时与Microsoft公司门户等应用集成。 有关详细信息,请参阅 适用于 Apple 设备的Microsoft企业 SSO 插件。
Linux 使用 Microsoft Linux 单一登录 作为其身份验证代理。
配置应用进行代理身份验证
若要在应用程序中启用中转身份验证,请执行以下步骤:
在 Azure 门户中,导航到 Microsoft Entra ID ,然后选择左侧菜单中 的应用注册 。
选择应用注册,然后选择身份验证。
通过平台配置将适当的重定向 URI 添加到应用注册:
在 “平台配置”下,选择“ + 添加平台”。
在 “配置平台”下,选择应用程序类型(平台)的磁贴以配置其设置,例如 移动和桌面应用程序。
在 自定义重定向 URI 中,输入平台的以下重定向 URI:
平台 重定向 URI Windows 10+ 或 WSL ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}macOS msauth.com.msauth.unsignedapp://auth适用于未签名的应用
msauth.{bundle_id}://auth用于已签名的应用Linux https://login.microsoftonline.com/common/oauth2/nativeclient从应用注册的概述窗格中,将
{your_client_id}或{bundle_id}替换为应用程序(客户端)ID。选择配置。
若要了解详细信息,请参阅 向应用注册添加重定向 URI。
返回“身份验证”窗格,在“高级设置”下,选择“是”以允许公共客户端流。
选择保存以应用更改。
若要授权应用程序使用特定资源,请导航到相关的资源,选择 API 权限,然后启用 Microsoft Graph 和其他要访问的资源。
重要
你还必须是租户的管理员,才能在首次登录时同意应用程序。
分配角色
若要使用中转身份验证成功运行应用代码,请使用 Azure 基于角色的访问控制(RBAC)授予用户帐户权限。 为用户帐户分配相应的 Azure 服务角色。 例如:
- Azure Blob 存储:分配存储帐户数据贡献者角色。
- Azure Key Vault:分配 Key Vault Secrets Officer 角色。
如果指定了应用,则必须为 user_impersonation访问 Azure 存储 设置 API 权限(上一部分中的步骤 6)。 此 API 权限允许应用在登录期间授予同意后代表已登录用户访问 Azure 存储。
实现代码
Azure 标识库支持使用 InteractiveBrowserCredential中转身份验证。 例如,若要在 MAUI 应用中使用 InteractiveBrowserCredential 向 Azure Key Vault SecretClient进行身份验证,请执行以下步骤:
Azure 标识库使用InteractiveBrowserCredential提供交互式代理身份验证。 例如,若要在控制台应用程序中使用 InteractiveBrowserCredential 通过 SecretClient 验证到 Azure 密钥保管库,请按照以下步骤操作:
安装 Azure.Identity 和 Azure.Identity.Broker 包。
dotnet add package Azure.Identity dotnet add package Azure.Identity.Broker获取对父窗口的引用,其中应显示帐户选取器对话框。
使用InteractiveBrowserCredentialBrokerOptions创建InteractiveBrowserCredential的实例。
// Get the parent window handle for MAUI on Windows
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
Microsoft.UI.Xaml.Window? windowHandle = parentWindow?.Handler?.PlatformView as Microsoft.UI.Xaml.Window;
IntPtr hwnd = windowHandle != null ? WinRT.Interop.WindowNative.GetWindowHandle(windowHandle) : IntPtr.Zero;
// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
UseDefaultBrokerAccount = true,
};
// Create credential that will use WAM broker on Windows
InteractiveBrowserCredential credential = new(options);
SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
安装 Azure.Identity 和 Azure.Identity.Broker 包。
dotnet add package Azure.Identity dotnet add package Azure.Identity.Broker注释
macOS 支持存在于
Azure.Identity.Broker版本 1.3.0 及更高版本中。获取对父窗口的引用,其中应显示帐户选取器对话框。
使用InteractiveBrowserCredentialBrokerOptions创建InteractiveBrowserCredential的实例。
// Get the parent window handle for MAUI on Mac Catalyst
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
UIWindow? uiWindow = parentWindow?.Handler?.PlatformView as UIWindow;
IntPtr hwnd = uiWindow != null ? uiWindow.Handle : IntPtr.Zero;
// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
UseDefaultBrokerAccount = true,
};
// Create credential that will use the broker on macOS
InteractiveBrowserCredential credential = new(options);
SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
安装 Azure.Identity 和 Azure.Identity.Broker 包。
dotnet add package Azure.Identity dotnet add package Azure.Identity.Broker注释
Linux 支持存在于
Azure.Identity.Broker版本 1.3.0 及更高版本中。获取对父窗口的引用,其中应显示帐户选取器对话框。
使用InteractiveBrowserCredentialBrokerOptions创建InteractiveBrowserCredential的实例。
/// <summary>
/// Get the handle of the console window for Linux
/// </summary>
[DllImport("libX11")]
static extern IntPtr XOpenDisplay(string display);
[DllImport("libX11")]
static extern IntPtr XRootWindow(IntPtr display, int screen);
try
{
IntPtr parentWindowHandle = XRootWindow(XOpenDisplay(null), 0);
Func<IntPtr> consoleWindowHandleProvider = () => parentWindowHandle;
InteractiveBrowserCredentialBrokerOptions options = new(parentWindowHandle)
{
UseDefaultBrokerAccount = true,
};
// Create the InteractiveBrowserCredential using broker support
InteractiveBrowserCredential credential = new(options);
Uri vaultUri = new("https://<your-key-vault-name>.vault.azure.net/");
SecretClient client = new(vaultUri, credential);
Console.WriteLine("Retrieving secret 'MySecret' from Key Vault...");
KeyVaultSecret secret = await client.GetSecretAsync("MySecret");
return 0;
}
小窍门
在 .NET 文档 GitHub 存储库中查看 完整的示例应用代码 。
在前面的示例中,属性UseDefaultBrokerAccount 被设置为true,这意味着使用默认系统帐户进入无提示的中介身份验证流。 这样,用户就不必重复选择同一帐户。 如果无提示、中转身份验证失败或 UseDefaultBrokerAccount 设置为 false, InteractiveBrowserCredential 则回退到交互式中转身份验证。
以下屏幕截图显示了备用的交互式中转身份验证体验:
以下屏幕截图显示了备用的交互式中转身份验证体验:
以下视频显示了备用的交互式中转身份验证体验: