我正在尝试在使用 ADFS 2016 作为 STS 的应用程序中实现“代表”流程。作为参考,我查看了此 Microsoft 教程(https://docs.microsoft.com/en-ca/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication-in -windows 服务器)。它可以正常工作,我可以登录到我的 Web 应用程序,然后在 UserAssertion 中使用我的原始访问令牌生成一个新的访问令牌,让适当的受众调用我的 API 但我发现绝对没有办法包含任何用户信息(子,名称、电子邮件、upn 等)添加到我的 API 的访问令牌中,即使我在 API 的 ADFS 配置中设置了声明规则。
我使用 Fiddler 检查了我的应用程序和 adfs 之间的通信,一切看起来都像教程中的信息。请参阅下面的“代表”请求的屏幕截图:
这是生成的访问令牌:
最后,这是我用来生成新访问令牌的代码:
private async Task<string> GetAccessToken(ClaimsPrincipal user, string originalAccessToken)
{
var authority = "[authority]";
var context = new AuthenticationContext(authority, false);
string userName = user.FindFirstValue("upn");
var userAssertion = new UserAssertion(originalAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer",userName);
var cc = new ClientCredential("https://localhost:44387/", "[client_secret]");
var result = await context.AcquireTokenAsync("https://localhost:44339/", cc, userAssertion);
return result.AccessToken;
}
您是否遇到过这种情况,如果是,您是否找到解决此问题的方法?
谢谢