获取方式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/