我试图为另一个adfs生成ActAs令牌,但我第一次登录ADFS并不返回SecurityToken。我是不是在启动时遗漏了一些配置?
Startup.cs
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions { });
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = ConfigurationManager.AppSettings["ida:Audience"],
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType,
TokenValidationParameters = new TokenValidationParameters
{
SaveSigninToken = true,
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"],
},
Configuration = getWsFederationConfiguration()
}
);
}
private static WsFederationConfiguration getWsFederationConfiguration()
{
WsFederationConfiguration configuration = new WsFederationConfiguration
{
Issuer = ConfigurationManager.AppSettings["wsFederation:trustedIssuer"],
TokenEndpoint = ConfigurationManager.AppSettings["wsFederation:issuer"],
};
configuration.SigningKeys.Add(new X509SecurityKey(new X509Certificate2(Convert.FromBase64String(ConfigurationManager.AppSettings["wsFederation:trustedIssuerSigningKey"]))));
return configuration;
}如何检索令牌:
public SecurityToken GetSecuritySAMLToken()
{
ClaimsPrincipal icp = Thread.CurrentPrincipal as ClaimsPrincipal;
ClaimsIdentity claimsIdentity = (ClaimsIdentity)icp.Identity;
BootstrapContext bootstrapContext = claimsIdentity.BootstrapContext as BootstrapContext;
//bootstrapContext is not null and bootstrapContext.Token is not null, however bootstrapContext.SecurityToken is null
return bootstrapContext.SecurityToken;
}更新1
尝试将字符串(SAMLToken)转换为SecurityToken,handler.ReadToken返回null。
public SecurityToken GetSecuritySAMLToken()
{
ClaimsPrincipal icp = Thread.CurrentPrincipal as ClaimsPrincipal;
ClaimsIdentity claimsIdentity = (ClaimsIdentity)icp.Identity;
BootstrapContext bootstrapContext = claimsIdentity.BootstrapContext as BootstrapContext;
return GetSecurityTokenFromStringToken(bootstrapContext);
}
private static SecurityToken GetSecurityTokenFromStringToken(BootstrapContext bootstrapContext)
{
var handler = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection();
SecurityToken ST = handler.ReadToken(bootstrapContext.Token);
return ST;
}发布于 2015-12-09 14:29:46
必须以这样的方式回收:
private static SecurityToken GetSecurityTokenFromStringToken(BootstrapContext bootstrapContext)
{
Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler handler = new Microsoft.IdentityModel.Tokens.Saml11.Saml11SecurityTokenHandler();
handler.Configuration = new Microsoft.IdentityModel.Tokens.SecurityTokenHandlerConfiguration();
XmlReader reader = XmlReader.Create(new StringReader(bootstrapContext.Token));
SecurityToken samlToken = handler.ReadToken(reader);
return samlToken;
}https://stackoverflow.com/questions/33938172
复制相似问题