首页 > 解决方案 > 如何获取登录用户的联合令牌 - Razor 站点 c#

问题描述

我正在尝试将当前登录用户的联合令牌传递给另一个 Microsoft 服务。

我是用户 RazorPages 和 .net Core

我正在访问我的用户:

OnGet{
    var type = this.User.Identity.AuthenticationType; //AuthenticationTypes.Federation
    var token = ????? 
    var credentials =  new VssCredentials(token);


}

我完全不知道从哪里获取令牌,我已经在断点处停下来检查对象,但没有发现任何明显的东西。

标签: c#asp.net-coreazure-devops

解决方案


对于WsFederation,它不会将令牌保存到 User.Identity。

您可以尝试options.Events.OnSecurityTokenValidated访问令牌并保存它。

    services.AddAuthentication(sharedOptions =>
            {
                sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
            })
            .AddWsFederation(options =>
            {
                //rest configuration
                options.Events.OnSecurityTokenValidated = context => {
                    var token = context.ProtocolMessage.GetToken();
                    var identity = new ClaimsIdentity();
                    identity.AddClaim(new Claim("token", token));
                    context.Principal.AddIdentity(identity);
                    return Task.CompletedTask;
                };
            })
            .AddCookie();

然后从var claims = User.Claims;


推荐阅读