我们有一个本地API,需要通过第三方开发的移动APP来访问(不知道是什么技术)。目前,身份验证是通过用户/密码针对内部登录 API 完成的,该 API 返回一个令牌,然后在调用中使用该令牌,但必须停止使用 Azure AD (EntraID) 和 MFA 进行身份验证。
因此,问题是如何保护 API 的安全,以便我们可以保证调用已得到正确的身份验证,以及如何更改 APP 才能做到这一点。
我同意您的观点,如果您使用用户名和密码对移动应用程序进行身份验证,则不支持启用 MFA 的用户帐户。参考这个MsDoc
因此,您可以利用移动应用程序和桌面应用程序使用的InteractiveBrowserCredential 身份验证。
我创建了一个 Microsoft Entra 应用程序并公开了如下 API:
在移动和桌面应用程序平台中添加了 重定向 URL 为
http://localhost
:
已授予API权限:
为了确保 API 的安全,您可以使用以下代码:
using Azure.Core;
using Azure.Identity;
using System;
class Program
{
static async Task Main(string[] args)
{
var scopes = new[] { "api://xxx/access_app" };
var tenantId = "TenantID";
var clientId = "ClientID";
var options = new InteractiveBrowserCredentialOptions
{
TenantId = tenantId,
ClientId = clientId,
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
// MUST be http://localhost or http://localhost:PORT
RedirectUri = new Uri("http://localhost"),
};
var interactiveCredential = new InteractiveBrowserCredential(options);
var accessToken = await interactiveCredential.GetTokenAsync(new TokenRequestContext(scopes));
Console.WriteLine($"Access Token: {accessToken.Token}");
}
}
我使用启用了 MFA 的用户登录:
成功生成API的访问令牌:
使用上述访问令牌,您可以调用您的API。
参考: