認証にIdentityServerを使用しており、JwtSecurityTokenHandler ValidateTokenを使用してアクセストークンを検証しています。これは問題なく動作していましたが、クライアントアプリケーションをASP.NET Core 1.0 RTM(RC1から)にアップグレードした後、検証は失敗します。受信したエラーは次のとおりです。IdentityServerでAccessTokenを検証できない
IDX10501: Signature validation failed. Unable to match 'kid'
私が使用した証明書とトークンの子供の鍵IDを見ると、私は彼らが異なっていることがわかります。 IdentityServerのjwks-endpointをチェックして、正しい証明書があることを確認し、子供と証明書のIDがそのエンドポイントと異なっていることに気付きました。私が理解していることから、彼らは同じであるはずですか?
証明書、トークン、IdentityServerが同じで、クライアントアプリケーションのコアだけがアップグレードされているため、アップグレード中にコードが壊れた理由はありません。
EDIT(詳細)
私はValidateIssuerSigningKeyは、デフォルトではfalseで、キーも(したがって、それが働いていた)前に検証されていないと思われます。これで、ValidateIssuerSigningKeyが(悪い習慣として)無視されているように見えて、検証が失敗するようです。
回避策/手動IssuerSigningKeyResolverを設定し、明示的に検証に使用するキーを与えることによって
を修正し、問題を修正し、検証が渡されます。回避策がどれほど優れているのか、なぜデフォルトがうまくいかないのかはっきりしないが、少なくとも私は今のところ進むことができる。
単純化されたコード...
new JwtSecurityTokenHandler().ValidateToken(authTokens.AccessToken,
new TokenValidationParameters()
{
IssuerSigningKeys = keys,
ValidAudience = audience,
ValidIssuer = issuer,
IssuerSigningKeyResolver = (arbitrarily, declaring, these, parameters) => new List<X509SecurityKey> { securityKey }
}, out securityToken);
実行しているものと更新したものを詳しく説明してください。おそらくhttps://github.com/IdentityServer/IdentityServer3/issues/3040に関連する – leastprivilege
同じ問題のような音。とにかく、IssuerSigningKeyResolverを手動で設定し、検証で明示的に使用するキーを与えることで解決しました。私はまだデフォルトがうまくいかない理由を疑問に思っていますが、少なくとも私はこの修正で作業しています。 –
同じエラーが発生しましたが、私たちの問題は、発行者と権限のURLに異なるネットケーシングがあることでした。 https:// myserver/sts、https:// myserver/Sts – Larsi