JWT Handler for .NET 4.5抛出错误:不支持带有单个参数的GetIssuerName

时间:2013-04-19 04:54:26

标签: wif saml acs jwt

我刚刚为这里描述的.Net 4.5库实现了这个JSON Web Token Handler:

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/

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

  

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

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

奇怪的是,当我将我的依赖方令牌类型从JWT更改为SAML 1或2时,我的依赖方的Return Uri从未被击中,我只是被重定向回我的领域。我希望最终落在我的回归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,   字符串发行者)'。]
  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 validationParameters)+278
  Microsoft.IdentityModel.Tokens.JWT.JWTSecurityTokenHandler.ValidateToken(SecurityToken   令牌)+2248
  System.IdentityModel.Tokens.SecurityTokenHandlerCollection.ValidateToken(SecurityToken   令牌)+135
  System.IdentityModel.Services.TokenReceiver.AuthenticateToken(SecurityToken   token,Boolean ensureBearerToken,String endpointUri)+502
  System.IdentityModel.Services.WSFederationAuthenticationModule.SignInWithResponseMessage(HttpRequestBase   请求)+1508
  System.IdentityModel.Services.WSFederationAuthenticationModule.OnAuthenticateRequest(对象   发件人,EventArgs args)+700
  System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +80 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+165

0 个答案:

没有答案