2017-10-22 3 views
1

リフレッシュトークンフローをテストするとき、UseOpenIddictメソッド(この場合)のカスタムキーを指定するオーバーロードされたシグネチャを使用すると、次のエラーが発生します。OpenIddict - カスタムキーを使用すると、リフレッシュトークンフローによってエンティティエラーが発生する

InvalidOperationException:エンティティタイプ 'OpenIddictAuthorization'が見つかりませんでした。エンティティタイプがモデルに追加されていることを確認します。

私は、主キーとしてintを使用するオーバーロードされたメソッドを使用しない場合は、正しく動作し、私はリフレッシュトークンを受け取ることです。私がこのエラーを受け取った過負荷を使用するときだけです。ここで

が起動

public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMvc(); 
      services.AddDbContext<RouteManagerContext>(options => 
      { 
       options.UseSqlServer(AppSettings.RouteManagerContext); 
       options.UseOpenIddict<int>(); 
      }); 
      services.AddIdentity<ApplicationUser, ApplicationRole>().AddEntityFrameworkStores<RouteManagerContext>().AddDefaultTokenProviders(); 
      services.Configure<IdentityOptions>(options => 
      { 
       options.ClaimsIdentity.UserNameClaimType = OpenIdConnectConstants.Claims.Name; 
       options.ClaimsIdentity.UserIdClaimType = OpenIdConnectConstants.Claims.Subject; 
       options.ClaimsIdentity.RoleClaimType = OpenIdConnectConstants.Claims.Role; 
      }); 
      services.AddOpenIddict(options => 
      { 
       options.AddEntityFrameworkCoreStores<RouteManagerContext>(); 
       options.AddMvcBinders(); 
       options.EnableTokenEndpoint("/connect/token"); 
       options.AllowPasswordFlow() 
        .AllowRefreshTokenFlow() 
        .SetAccessTokenLifetime(TimeSpan.FromMinutes(1)) 
        .SetRefreshTokenLifetime(TimeSpan.FromMinutes(20160)) 
       options.DisableHttpsRequirement(); 
      }); 
      services.AddAuthentication() 
       .AddOAuthValidation() 
       .AddFacebook(o => { o.ClientId = AppSettings.FacebookAppID; o.ClientSecret = AppSettings.FacebookAppSecret; }); 
      services.AddDocumentation(AppSettings); 
     } 

、ここでのコンテキスト宣言は私のコンテキストが

public class RouteManagerContext : IdentityDbContext<ApplicationUser, ApplicationRole, int> 
{ 
    public RouteManagerContext(DbContextOptions<RouteManagerContext> options) : base(options) { } 
    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 
    } 
} 

であるアプリケーションは、私はニーズをopeniddict、データベース内のすべてのテーブルを持っているように正しく設定されているようです。アプリケーション、承認、トークンなど...

すべての例は同じように構成されているようです。 アイデア

答えて

0

options.UseOpenIddict<int>();を呼び出すと、デフォルトのOpenIddictエンティティを使用し、カスタムキータイプ(stringの代わりにint)を使用するようにEntity Framework Coreに依頼しています。

ただし、services.AddOpenIddict()も使用しています。これは、デフォルトのエンティティとデフォルトのキータイプでOpenIddictを設定します。 Entity FrameworkコアストアがOpenIddictによって呼び出されると、ジェネリック定義が異なるため、予想されるエンティティはコンテキスト内に見つかりません。

矛盾を修正するには、services.AddOpenIddict<int>()を使用してください。

+1

ありがとうございました...私は、その定義をAddOpenIddictメソッドで一致させなければならなかったことに気付きませんでした。今は完璧に動作します。 – Geekn

関連する問題