【问题标题】:WIF: How to specify which claims to return upon authentication?WIF:如何指定在身份验证时返回哪些声明?
【发布时间】:2012-09-19 08:35:08
【问题描述】:

类似于this question,除了我需要在身份验证时而不是稍后获得其他声明。

我正在将我的 RP 作为身份验证插件实现到另一个网站,所以我不能(或者宁愿尽可能避免)做诸如更改 web.config 文件或添加 FederationMetadata.xml 到我的 RP。

我已成功通过 STS 进行身份验证,现在除了它发送给我的基本信息外,我还需要获得更多声明。 STS 是公开的(或附近),不受我的控制,并且会有许多不同的 RP 针对它进行身份验证,所以我不希望每个 RP 都会受到特殊对待。因此,我假设 STS 在我执行身份验证之前对我的 RP 一无所知,并且在身份验证完成后它会忘记所有相关信息。

如前所述,我正在使用 WIF,并且我正在使用代码执行所有操作。我在哪里指定要发送哪些声明?到目前为止,这是我的代码:

// Init configuration
var config = new ServiceConfiguration();
config.AudienceRestriction.AllowedAudienceUris.Add(new Uri("https://MyAudienceURI/"));
config.CertificateValidator = System.IdentityModel.Selectors.X509CertificateValidator.None;
var issuers = new ConfigurationBasedIssuerNameRegistry();
issuers.AddTrustedIssuer("08F81147C44D95CDA617963AFF0650EF26578E4A", "http://STSIssuer/trust");
config.IssuerNameRegistry = issuers;

// Create the FAM
var fam = new WSFederationAuthenticationModule();
fam.ServiceConfiguration = config;
fam.PassiveRedirectEnabled = true;
fam.Issuer = "https://STSUrl/Default.aspx";
fam.Realm = "https://MyAudienceURI/";
fam.Reply = Request.Url.ToString();
fam.RequireHttps = false;

// Check the current request
var req = System.Web.HttpContext.Current.Request;
if (!fam.CanReadSignInResponse(req, true))
{
    fam.RedirectToIdentityProvider("Nop.Plugin.ExternalAuth.WIF", Request.Url.ToString(), false);
    Response.End();
}

var principal = ClaimsPrincipal.CreateFromIdentities(config.SecurityTokenHandlers.ValidateToken(fam.GetSecurityToken(fam.GetSignInResponseMessage(req))));

【问题讨论】:

    标签: c# wif claims-based-identity


    【解决方案1】:

    通常,STS 配置为提供声明。配置基于每个 RP,因此不同的 RP 可以获得不同的声明。

    您可以使用 WIF 来扩充它。

    使用 ClaimsAuthenticationManager 并覆盖 Authenticate。

    然后是这样的:

    ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(new Claim(...))

    如果声明是外部的,您必须自己获取它们,例如访问 AD?

    【讨论】:

    • 是的,我想通了。但事实证明,还有一个参数 - fam.Requestfam.RequestPtr 可用于传递特定声明的请求。我用过它,它奏效了。不过我会接受你的回答,因为它是唯一的一个。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多