(我们的环境是 Azure,我们的服务托管在 Azure 应用服务中。)
我们有一个遗留的 React 应用程序托管在 MVC .Net Core Web 应用程序中。
Web 应用程序所做的就是获取访问令牌(我们正在使用 Microsoft.Identity.Web 包)
我们的program.cs大致如下:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi(new string[] {"api://{Guid API}/Users.ReadWrite.All"})
.AddInMemoryTokenCaches();
然后家庭控制器获取访问令牌:
var token = await _tokenAcquisition.GetAccessTokenForUserAsync(new string[] {"api://{uri}/Users.ReadWrite.All"});
控制器然后将此访问令牌传递给请求标头,并将标头传递给 React 应用程序以供使用。
React 应用程序将使用令牌访问另一个 API(我们拥有)。
我们一直在使用客户端凭证流程(客户端 ID、客户端密钥等)来获取访问令牌,并且运行良好。但现在我们被要求删除所有客户端机密和证书,转而使用托管身份。我们得到的指导是使用联合凭证(用户管理身份)
有什么想法吗?
我浏览了很多不同的存储库和博客。我的思绪在飞速旋转,因为我感觉就像一个模糊的拼图,我正在把它拼凑在一起。我只是想设定水平,并向这里的优秀人士询问一些想法。
提前致谢!
托管身份只能替代一种场景:您使用客户端 ID + 客户端密钥/证书来获取具有 Azure 资源所在同一租户内的应用程序权限的访问令牌。
GetAccessTokenForUserAsync
无法替换,因为它使用委派权限 (ForUser) 并包含用户信息。