.net - 如何从 ClaimsPrincipal 获取 SecurityToken?

标签 .net authentication identity claims-based-identity federated-identity

获取方式SecurityToken来自 ClaimsPrincipal ?

我需要它,因为我想将它从 MVC 应用程序传递到 AuthenticationManager / Authenticate 中的 WCF 服务.

在 Authenticate 方法中,BootstrapContext 的值为 null。即使经过身份验证,它有时也会变为 null,这使其成为我不可靠的选择。

这是我的身份验证管理器类:

public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
    string passportID = incomingPrincipal.Identity.GetPassportID().ToString();

    try
    {
        // I need the token here 
        SecurityToken token = GetToken(incomingPrincipal);
        return base.Authenticate(resourceName, incomingPrincipal);
    }
    catch (Exception ex)
    {
        throw new SecurityException("User is not authenticated.", ex);
    }
}

最佳答案

我最终使用了这段代码:

BootstrapContext context = ClaimsPrincipal.Current.Identities.First().BootstrapContext as BootstrapContext;
SecurityToken token = context.SecurityToken;

if (context.SecurityToken != null)
{
    token = context.SecurityToken;
}
else if (String.IsNullOrWhiteSpace(context.Token) == false)
{
    var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
    token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token)));
}

var actAsToken = GetActAsToken(token);

您可以在 this 中阅读更多相关信息所以问题。看来context.SecurityToken将在一段时间内被清除,所以人们不能过分依赖它。

关于.net - 如何从 ClaimsPrincipal 获取 SecurityToken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26801521/

相关文章:

token - 如何获取 openstack token 并对其进行验证?

.net - Azure 移动服务与设备作为服务器的 Web 套接字

authentication - Moodle 认证

c# - 无法在身份服务器 3 中获取 token

azure - IDX20804 : Unable to retrieve document from: 'https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration'

java - 与 Google OpenID 服务器通信返回 400

c# - 我如何确保在 .NET 中正确处理对象?

c# - 从 DataTable 获取单个值的最佳方法?

c# - JIT简单优化

powershell - 如何使用函数身份验证或 Azure AD 服务主体对 Azure 函数进行身份验证