SecurityTokenSignatureKeyNotFoundexception lors de la validation de JWT signature

Je suis en train de mettre en œuvre les OpenID Connect spécification pour mon organisation. Je suis à l'aide de Microsoft OWIN la mise en œuvre d'OpenID Connect dans un test de la partie de confiance de l'application pour vérifier ma mise en œuvre du protocole.

J'ai exposé les métadonnées suivantes du document:

{
  "issuer": "https://acs.contoso.com/",
  "authorization_endpoint": "http://localhost:53615/oauth2/auth",
  "token_endpoint": "http://localhost:53615/oauth2/token",
  "userinfo_endpoint": "http://localhost:53615/connect/userinfo",
  "jwks_uri": "http://localhost:53615/connect/keys",
  "ui_locales_supported": [
    "en-GB"
  ]
}

La clé de signature est exposé dans le présent document:

{
  "keys": [
    {
      "n": "xpXxl3M-YkZlzQJdArO1TfOGT2no-UL4dbZ7WuSCNIsSfyGDaqUXjMMHNyq9yD3vp-NCyk8kmn7d5XqHufnceXJM8q4xTrhN3lvywdBSbR-dwXsA-B-MJVgfiK0d_z-mxP9ew2Hj9-KkWbWCzsswlWp3gZ4mB4RGutB1IRSzXVIbvZ-MtKUb6XUDU4LDb_c1xCEXWZxhR-o1a1dLfObH2hHJ-w5y6odGlKtOFx4i4h0u7-Oj5R6k5b2YXEHM0IuYeN0u0sQvrTecokntGzPrvhnKy69I7Z_az5rC5kgloh25D9lTbe4vcRU7FXlYCFYDZsT0_IkGIXRi7brOS4f1ow",
      "e": "AQAB",
      "kty": "RSA",
      "use": "sig",
      "alg": "RS256",
      "kid": "F8A59280B3D13777CC7541B3218480984F421450"
    }
  ]
}

L'identité jeton est généré à l'aide de la JwtSecurityToken classe et de son gestionnaire, à l'aide de la X509SigningCredentials classe. Ce code est représentative de la façon dont le jeton est construit et est retourné à l'appel système comme un paramètre de la réponse de données.

var credentials = new X509SigningCredentials(cert); //My certificate.
var issuedTime = DateTime.UtcNow;
var expiresTime = issuedTime.AddMinutes(5);
var epoch = new DateTime(1970, 01, 01, 0, 0, 0);

var claims = new[]
{
    new Claim("sub", Guid.NewGuid().ToString()),
    new Claim("iat" Math.Floor((issuedTime - epoch).TotalSeconds).ToString()),
    new Claim("nonce", nonce), //Value from client
}

var token = new JwtSecurityToken(
    "https://acs.contoso.com",
    client_id, //Value from client
    claims,
    new Lifetime(issuedTime, expiresTime),
    credentials);

var handler = new JwtSecurityTokenHandler();
parameters.Add("id_token", handler.WriteToken(token)); //Outgoing parameters.

Lorsque je tente de passer le jeton signé à l'arrière de la partie utilisatrice de l'application, le OWIN middleware accepte le POSTE, et tente de vérifier la signature de la marque. En agissant de la sorte, l'exception suivante est générée:

SecurityTokenSignatureKeyNotFoundexception: IDX10500: Signature
la validation a échoué. Incapable de résoudre SecurityKeyIdentifier:
'SecurityKeyIdentifier ( IsReadOnly = False, Compteur = 1, Clause[0] =
X509ThumbprintKeyIdentifierClause(Hash =
0xF8A59280B3D13777CC7541B3218480984f421450) ) ', jeton:
'{"typ":"JWT","alg":"RS256","x5t":"-KWSgLPRN3fMdUGzIYSAmE9CFFA"}.{"iss":"https://test.accesscontrol.net/","aud":"test","nbf":1404917162,"exp":1404917462,"sub":"60eb55ec-0699-4068-bfa6-41666fc2b2e9","iat":"1404917162"}
RawData:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1niising1dci6ii1lv1nntfbstjnmtwrvr3pjwvnbbuu5q0zgqsj9.eyJpc3MiOiJodHRwczovL2Fjcy5zdXJly2xvdwquy29tlyisimf1zci6inrlc3qilcjuymyioje0mdq5mtcxnjisimv4cci6mtqwndkxnzq2miwic3viijoinjblyju1zwmtmdy5os00mdy4lwjmytytnde2njzmyzjimmu5iiwiawf0ijoimtqwndkxnze2mij9.xkP0RwlX3CYfU0KhFsVvLJC94WK22DTqntm71cfjij8vuhv3b2yhdqfq70n8mqeyir8vtr6oqqno6uqxqx4rxus6zkfk9liv3n9nhcs97wjhp2jfefjyescytrmwcnnwssl7vkm2jxqfwkoqtnogp-ba04TtI6jVrjhOQXH43eCJ9vNuBUzdD-t8CAdmnbvH0nWpIB8kWbw5v8Sa0aQuxMjjyblc_2iw3x13dqnyvjp4fa7esb8n7c1it0keb-VKfUqiGD3VecyEZGGZbaGE8rvVet5QrY1lj3v4ym8j6-xDc5Yndc4swOun0L3D6TYk-8gdVXUJDRjbv1ZuhZltsw'.

Le composant est toujours en pré-version, et c'est peut-être une faille dans la mise en œuvre, mais je tiens pour acquis que c'est mon erreur jusqu'à ce que toutes les possibilités ont été éliminées.

Est-ce que je suis en train de faire ce qui est évidemment faux, ou est-il quelque chose que je doit faire pour comprendre exactement pourquoi la signature est de ne pas être validées?

OriginalL'auteur Paul Turner | 2014-07-09