首页 > 解决方案 > ADFS 本​​机应用程序访问令牌缺少声明

问题描述

我正在尝试对使用 ADFS 与我的 ASP.NET MVC API 进行通信的 WPF 应用程序进行身份验证。我已经设法获取访问令牌并使用它来正确传递Authorize属性,但我注意到访问令牌缺少一些upn我想在 API 控制器中用于唯一用户标识的关键声明(例如)。我还注意到IdToken字符串和对象在成功验证后与对象中的字符串UserInfo一起可用,并且它们都包含正确的值。AccessTokenAuthenticationResultupn

问题是当我收到响应错误时,我无法使用IdToken授权标头。Unauthorized

Microsoft.IdentityModel.Clients.ActiveDirectory在我的客户端应用程序和Microsoft.Owin.Security.ActiveDirectoryAPI 中的库中使用。

客户端代码:

var authRes = await authCtx.AcquireTokenAsync(resourceAddress, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.Auto)); //resourceAddress equals the API url

接口代码:

       app.UseActiveDirectoryFederationServicesBearerAuthentication(
           new Microsoft.Owin.Security.ActiveDirectory.ActiveDirectoryFederationServicesBearerAuthenticationOptions
           {
               MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"],  //standard ADFS metadata endpoint
               TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
               {
                   ValidAudience = ConfigurationManager.AppSettings["ida:Audience"] // API url
               }, 
           });

ADFS 服务器上还为 UPN 值配置了声明规则:

UPN 规则

标签: asp.netoauthoauth-2.0openidadfs

解决方案


推荐阅读