2012-09-19 1 views
1

this question과 유사하지만 인증의 순간에 추가 클레임을 받아야합니다. 나중에는 그렇지 않습니다.WIF : 인증시 반환 할 클레임을 지정하는 방법

내가 다른 웹 사이트에 인증 플러그인으로 내 RP를 구현하고있어, 그래서하지 (또는 오히려 모든 가능한 피하기 위해 같은 것) 할 수는 web.config 파일을 변경하거나 내 RP에 FederationMetadata.xml을 추가하는 등의 일을.

나는 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)))); 

답변

2

일반적으로 STS는 클레임을 제공하도록 구성되어 있습니다. 구성은 RP 단위로 이루어 지므로 RP마다 다른 주장을 할 수 있습니다.

WIF를 사용하여 추가 할 수 있습니다.

ClaimsAuthenticationManager를 사용하고 인증을 재정의하십시오.

다음과 같이 : 주장이 외부 경우

((IClaimsIdentity) incomingPrincipal.Identity) .Claims.Add (새 청구 (...))

, 당신은 그들에게 자신을 얻을 수있다 예 AD에 액세스하고 있습니까?

+0

그래, 나도 알아 냈어. 그러나 특정 주장에 대한 요청을 전달하는 데 사용할 수있는 매개 변수 'fam.Request' 및'fam.RequestPtr '도 있습니다. 나는 그것을 사용했고 효과가 있었다. 그 대답이 유일하기 때문에 당신의 대답을 받아 들일 것입니다. :) –

관련 문제