1

我刚刚为此处描述的 .Net 4.5 库实现了这个 JSON Web 令牌处理程序:

http://www.cloudidentity.com/blog/2012/11/20/introducing-the-developer-preview-of-the-json-web-token-handler-for-the-microsoft-net-framework-4- 5-2/

我有一个应该向我的应用程序返回 JWT 令牌的 ACS 服务。但是,当我应该将令牌返回到我的应用程序时(当浏览器重定向到我的依赖方的返回 uri 时),我得到了这个异常:

WIF10200:不支持带有单个参数的 GetIssuerName。调用:'GetIssuerName(SecurityToken securityToken, string issuer)'。

我认为这不是我的代码直接的问题;因为如果我进行解决方案范围的搜索,“GetIssuerName”不在我的解决方案中。我认为这可能与 WIF 想要信任的证书颁发者有关,但我已按照上面链接的文章中的说明从 ACS 站点的 FederationMetadata 导入证书......我对此完全感到困惑一。

奇怪的是,当我将我的依赖方令牌类型从 JWT 更改为 SAML 1 或 2 时,我的依赖方的 Return Uri 永远不会被命中,我只是被无误地重定向回我的领域。我希望最终能降落在我的 Return Uri 上。如果有人可以向我解释这两种现象,那将有很大帮助!

更新

.NET 4.5 中的 GetIssuerName 方法是 System.IdentityModel.Tokens.ValidatingIssuerNameRegistry 类的一部分(还有一个具有相同方法的 System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry 类,但这不是我正在使用的方法)。

通过查看元数据,类中有 2 个具有此名称的重写方法:

public override string GetIssuerName(SecurityToken securityToken);
public override string GetIssuerName(SecurityToken securityToken, string requestedIssuerName);

我从 WIF 得到的错误似乎直接来自那里列出的第一个方法,正如您从下面的堆栈跟踪中看到的那样。随着我的依赖方返回 JWT,某个地方应该调用第二个方法,其签名有第二个参数,但调用的是第一个。我希望我知道如何改变它。

[NotSupportedException:WIF10200:不支持带有单个参数的 GetIssuerName。调用:'GetIssuerName(SecurityToken securityToken, string issuer)'。]
System.IdentityModel.Tokens.ValidatingIssuerNameRegistry.GetIssuerName(SecurityToken securityToken) +156
Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateIssuer(JWTSecurityToken jwt, TokenValidationParameters validationParameters) +1303
Microsoft .IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(JWTSecurityToken jwt, TokenValidationParameters 验证参数) +278
Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(SecurityToken token) +2248
System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken token) +135
System.IdentityModel.Services.TokenReceiver.AuthenticateToken(SecurityToken token, Boolean ensureBearerToken, String endpointUri) +502
System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase request) + 1508
System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +700
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&同步完成)+165

4

0 回答 0