0

我正在使用 .Net 4.5,运行配置了身份提供程序的 ASP.net 服务。我想更改 AudienceUri 验证算法以允许通配符或将其配置为忽略子域。

在此页面中:http: //msdn.microsoft.com/en-us/library/system.identitymodel.selectors.samlsecuritytokenauthenticator.allowedaudienceuris (v=vs.100).Aspx

它在评论中说:

(可选)覆盖 ValidateAudienceRestriction 方法以指定用于允许 URI 的验证算法。

我知道我需要创建一个新类,从 SamlSecurityTokenAuthenticator 继承并覆盖该方法。但是我不确定如何应用此覆盖,我认为我应该实例化新类并将其分配给某个类的静态成员,例如 FederationAuthentication,但我找不到合适的类。

有人可以澄清如何解决这个问题吗?

4

1 回答 1

1

有一个解决方法。

如果收到的安全令牌的 RP 验证因受众而失败:

[System.InvalidOperationException]: {"ID1032: At least one 'audienceUri' must be specified in the SamlSecurityTokenRequirement when the AudienceUriMode is set to 'Always' or 'BearerKeyOnly'. Either add the valid URI values to the AudienceUris property of SamlSecurityTokenRequirement,  or turn off checking by specifying an AudienceUriMode of 'Never' on the SamlSecurityTokenRequirement."}
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: null
    HResult: -2146233079
    InnerException: null
    Message: "..."
    StackTrace: ..
    TargetSite: ..
}

此异常(以及许多其他异常)可以在 Application_Error 中处理,使用 Server.GetLastError() 确定异常。

我注意到:

FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenReceived 

在引发此异常之前触发。此回调有 SecurityTokenReceivedEventArgs,其中有 SessionToken,您可以在其中找到所有的 audienceUri(s)。您可以在那里实现所需的逻辑并将相关的 AudienceUri 添加到:

    FederatedAuthentication.ClaimsAuthorizationModule.FederationConfiguration.
IdentityConfiguration.AudienceRestriction.AllowedAudienceUris

正如我所说,这只是一种解决方法,如果您可以为我的原始问题提供更多信息,那就太好了:)

谢谢。

于 2014-05-29T12:47:44.640 回答