SecurityTokenSignatureKeyNotFoundexception bei der überprüfung von JWT Signatur

Ich versuche zu implementieren, die den OpenID Connect-Spezifikationen für meine organisation. Ich bin mit Microsofts OWIN-Implementierung von OpenID Connect in einem test relying party-Anwendung, um zu überprüfen, meine Implementierung des Protokolls.

Habe ich ausgesetzt, die folgende Metadaten-Dokument:

{
  "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"
  ]
}

Den Signaturschlüssel ausgesetzt ist, wie dieses Dokument:

{
  "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"
    }
  ]
}

Die Identität token erzeugt wird, über die JwtSecurityToken Klasse und die dazugehörige Prozedur, mit der X509SigningCredentials Klasse. Dieser code ist repräsentativ, wie das token ist so aufgebaut und zurückgegeben an die aufrufende system als parameter der response-Daten.

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.

Wenn ich Versuch zu passieren, das signierte token an die relying party-Anwendung, die OWIN-middleware übernimmt die POST und versucht zu überprüfen, die Signatur des Tokens. Dabei wird die folgende Ausnahme ausgelöst:

SecurityTokenSignatureKeyNotFoundexception: IDX10500: Unterschrift
die Validierung fehlgeschlagen ist. Nicht lösen SecurityKeyIdentifier:
'SecurityKeyIdentifier ( IsReadOnly = False, Count = 1, Ziffer[0] =
X509ThumbprintKeyIdentifierClause(Hash =
0xF8A59280B3D13777CC7541B3218480984f421450) ) ', token:
'{"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'.

Die Komponente ist noch pre-release, so kann dies ein Fehler in der Implementierung, jedoch möchte ich annehmen, dass es mein Fehler ist, bis alle Möglichkeiten ausgeschlossen ist.

Gibt es irgendetwas, was ich Tue, und das ist offensichtlich falsch, oder gibt es etwas, was ich tun sollte, genau zu verstehen, warum die Signatur nicht validiert werden?

InformationsquelleAutor Paul Turner | 2014-07-09

Schreibe einen Kommentar