2017-10-22 72 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>();,您要求Entity Framework Core使用默認OpenIddict實體,但使用自定義密鑰類型(int而不是string)。

但是,您還使用services.AddOpenIddict(),它使用默認實體和默認密鑰類型來配置OpenIddict。當實體框架Core存儲由OpenIddict調用時,由於其通用定義不同,因此無法在上下文中找到期望的實體。

要解決不一致問題,請使用services.AddOpenIddict<int>()

+1

非常感謝你......沒有意識到我必須在AddOpenIddict方法中匹配該定義。現在完美運作。 – Geekn

相關問題