私はIdentityServer4の新機能です。私はIPersistedGrantStore
を実装して、リフレッシュトークンをデータベースにPersistedGrants
のようなテーブルに保存する必要があることを知りました。IdentityServer4 - mysql.dataを使用してリフレッシュトークンをデータベースに保存する方法は?
ネイティブアプリが新しいアクセストークンを要求したときのIdentityServerログは、"refresh_token" grant with value: "{value}" not found in store
です。
私は永続化された許可ストアのメモリ内バージョンを使用しているからです。そこで、リフレッシュトークンをPersistedGrant
テーブルに保存する必要があります。
したがって 私startup.csで、私は次の行を追加:
builder.Services.AddScoped<IPersistedGrantStore, PersistedGrantStore>();
とIPersistedGrantStore.csは、だから私はCustomPersistedGrant.csクラスを持っている
public interface IPersistedGrantStore
{
Task StoreAsync(CustomPersistedGrant grant);
Task<CustomPersistedGrant> GetAsync(string key);
Task<IEnumerable<CustomPersistedGrant>> GetAllAsync(string subjectId);
}
です
public class CustomPersistedGrant
{
public string Key { get; set; }
public string Type { get; set; }
public string SubjectId { get; set; }
public string ClientId { get; set; }
public DateTime CreationTime { get; set; }
public DateTime? Expiration { get; set; }
public string Data { get; set; }
}
今私は自分のPersistedGrantStore.csクラスのコードを書く必要があります。 しかし、質問は:PersistedGrantStore.csクラスのコードを書いたら、私はPersistedGrantStore.cs
クラスを呼び出しますか? Identity.ServerでAccount/AccountController
?私はEntity Frameworkを使用したくないので、EntityFrameworkを使用しないとその例は見つかりませんでした。
ありがとうございました。
ありがとうございました。私の** startup.cs **では、この行で実装を登録しました: 'builder.Services.AddScoped();'。私の目標は助成金を維持することですが、IdentityServer4で 'IPersistedGrantStore'と私の' PersistedGrantStore'を使って助成金を維持するコードはどこにありますか? QuickStartIdentityServerプロジェクトでgithub –
の参照が見つかりません。これはIdentityServerの内部呼び出しです。 InMemoryバージョンを使用しているときに電話をかける必要はないので、PersistedGrantストアに電話する必要はありません。 –
私の 'PersistedGrantStore'ではすべてのインターフェースメンバーを実装しました。このクラスのすべてのメソッドの始めにブレークポイントを配置してデバッグしました。問題は、アプリケーションが壊れないということですが、私が間違っているところを理解できません。クライアントを 'GrantTypes 'で設定します。Code'、 'RequireConsent = false'、' AllowOfflineAccess = true'を指定します。何か不足していますか? –