2017-08-15 23 views
1

KeyCloakを使用してログインするとエラーが発生します。KeyCloak Visual Studio

私が手にエラーが

アクセストークンとリフレッシュトークンの両方がの有効期限が切れている」私はここに詳細な例を踏襲しているです。 https://github.com/dylanplecki/KeycloakOwinAuthentication/wiki/ASP.NET-MVC-Tutorial

コードはログインページまで機能します。私は自分のログインIDとパスワードを入力し、ログインボタンを押してすぐに上記のエラーを黄色い画面に表示します。

マスターレルムでクライアントを作成し、上記のWebページの内容に基づいてすべての設定に基づいています。

私はこれを修正するために何をする必要があるか知っていますか?

答えて

0

これを解決し、Keycloakを通常通り使用する必要があります: これはバグとして報告されており、ライブラリ作成者/管理者がもうこれで作業していないため、修正する必要がありますローカルコピーを作成し、NuGetパッケージの代わりに使用します。

背景: Keycloakは、例えばトークンのnbfまたはexpのような時間基準を必要とするすべての属性、でUTC時刻を使用しています。 Accessトークンは通常5分間有効であるため、マシンがUTC時間と一致するタイムゾーンにある場合を除いて、5分間の制限を行うことはできません。 あなたはGitHubのhereから、ライブラリコードのコピーをダウンロードして、最初のプロジェクトを閲覧することができますライブラリと 問題は、それはあなたがDateTime.UtcNow

実装に手動でそれを変更する必要がDateTime.Nowとトークンで時間を比較していることです解決策:KeycloakIdentityModelは、タスクが配置されているファイルに:KeycloakIdentity.cs。 443行目に行くと、これは比較タスクGetClaimsAsyncの始まりです。

タスク内にはif文があり、DateTime.NowをすべてDateTime.UtcNowに変更します。結果は次のようになります。

// Check to update cached claims, but not if refresh token is missing (as in bearer mode) 
      if ((_kcClaims == null || _accessToken.ValidTo <= DateTime.UtcNow) && _refreshToken != null) 
      { 
       // Validate refresh token expiration 
       if (_refreshToken.ValidTo <= DateTime.UtcNow) 
        throw new Exception("Both the access token and the refresh token have expired"); 

       // Load new identity from token endpoint via refresh token 
       await RefreshIdentity(_refreshToken.RawData); 
      } 

変更は、そのソリューションを再構築して、〜\ SRC \ Owin.Securityへの溶液の物理的なフォルダを参照した後、ライン439および442

をで開催されました.Keycloak \ bin \ Debugの両方で変更された日付が実際の時刻に似ていることを確認し、両方のファイル KeycloakIdentityModel.dllOwin.Security.Keycloak.dllを簡単なディレクトリにコピーします(これは必須ではありませんが、簡単です)。

解決策から、ソリューションエクスプローラで参照ノードを右クリックし、参照の追加を選択して、参照から両方を削除し、新しいものを追加します。保存した場所を参照して追加してください。この方法で正しく機能するはずです。

関連する問題