2016-07-07 14 views
4

認証に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); 
+1

実行しているものと更新したものを詳しく説明してください。おそらくhttps://github.com/IdentityServer/IdentityServer3/issues/3040に関連する – leastprivilege

+1

同じ問題のような音。とにかく、IssuerSigningKeyResolverを手動で設定し、検証で明示的に使用するキーを与えることで解決しました。私はまだデフォルトがうまくいかない理由を疑問に思っていますが、少なくとも私はこの修正で作業しています。 –

+2

同じエラーが発生しましたが、私たちの問題は、発行者と権限のURLに異なるネットケーシングがあることでした。 https:// myserver/sts、https:// myserver/Sts – Larsi

答えて

0

クライアントおよびAPIがIdentityServerの同じインスタンスを参照する必要があります。異なるスロット(メインとステージング)と、異なるスロットを一貫して参照しない2つのアプリケーションを持つAzureでIdentityServerHostを実行しています。クライアントはIdSrv-mainプロバイダーによって発行されたアクセストークンを受け取り、それを別のプロバイダーIdSrvステージングから期待されるAPIに渡しました。 APIはそれを検証し、エラーを返しました。

問題は、errrorが問題の実際の原因を示唆していないことです。 MSは、デバッグに役立つより詳細なエラーメッセージを提供する必要があります。 現在のエラーメッセージで原因を特定するだけでは不十分です。

関連する問題