我正处于不知道如何继续的情况。在我们的应用程序环境中,我们正在为微服务实施托管身份。目前,我正在开发一个 API (API-1),根据系统分配的托管身份授予对数据库和其他资源的访问权限。但是,此 API 还需要从具有委派 user_impersonation 权限的另一个 API (API-2) 检索其部分数据。
我可以使用以下代码代表用户在 API-1 中检索令牌:
var builder = ConfidentialClientApplicationBuilder
.Create(clientInformation.ClientId)
.WithAuthority($"https://login.microsoftonline.com/{clientInformation.TenantId}")
.WithClientSecret(clientSecret);
var userAssertion = new UserAssertion(currentAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer");
var application = builder.Build();
var onBehalfOfBuilder = application.AcquireTokenOnBehalfOf(scopes, userAssertion);
var authenticationResult = await onBehalfOfBuilder.ExecuteAsync(cancellationToken).ConfigureAwait(false);
return authenticationResult.AccessToken;
但是,此代码使用 AppRegistration (ClientId/ClientSecret),并且最大限度地减少 ClientSecrets 的使用正是我们实施托管身份的目标。是否有一段代码或配置可以让我们利用委托的 user_imeronate 权限代表用户的托管身份检索令牌?我唯一能找到的是使用 PowerShell 脚本在托管身份上设置应用程序权限。
问题 1:是否可以将委派权限分配给托管身份?
问题 2:我尝试使用委派权限从后端 API 检索令牌是否犯了概念错误?
问题 1:是否可以将委派权限分配给托管身份?
没有。
问题 2:我尝试使用委派权限从后端 API 检索令牌是否犯了概念错误?
不一定,代流就是针对这种场景的。 托管身份不支持代表。 您只能从托管身份端点请求特定资源的令牌,无法指定您收到的令牌。