【发布时间】:2015-11-26 12:00:19
【问题描述】:
我正在尝试为另一个 adfs 生成 ActAs 令牌,但我登录的第一个 ADFS 没有返回 SecurityToken。 我在 OWIN 启动时缺少一些配置吗?
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
尝试将 string(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;
}
【问题讨论】:
标签: asp.net-web-api2 token owin saml adfs2.0