1

この質問と同様ですが、認証の時点で追加のクレームを取得する必要があることを除いて、後でではありません。

web.configRPを別のWebサイトへの認証プラグインとして実装しているので、ファイルを変更したりFederationMetadata.xml、RPに追加したりすることはできません(または、可能であれば避けたいと思います) 。

私はSTSに対して正常に認証できました。今度は、STSから送信される非常に基本的なものに加えて、さらにいくつかのクレームを取得する必要があります。STSは公開されており(またはその近くにあり)、私の制御が及ばず、STSに対する認証にはさまざまなRPが存在するため、すべてのRPが特別な扱いを受けることは期待できません。したがって、STSは、認証を実行するまでRPについて何も知らず、認証が完了すると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))));
4

1 に答える 1

2

通常、STSはクレームを提供するように構成されています。構成はRPごとに行われるため、RPが異なればクレームも異なります。

WIFを使用してこれを拡張できます。

ClaimsAuthenticationManagerを使用して、Authenticateをオーバーライドします。

そして次のようなもの:

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

クレームが外部のものである場合、ADにアクセスするなど、自分でクレームを取得する必要がありますか?

于 2012-09-19T20:12:13.490 に答える