2017-10-22 15 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 엔터티를 사용하지만 사용자 지정 키 형식 (string 대신 int)을 사용하게됩니다.

그러나 기본 엔터티 및 기본 키 유형으로 OpenIddict를 구성하는 services.AddOpenIddict()도 사용하고 있습니다. Entity Framework Core 상점이 OpenIddict에 의해 호출 될 때, 일반 정의가 다르기 때문에 예상 엔티티를 컨텍스트에서 찾을 수 없습니다.

불일치를 수정하려면 services.AddOpenIddict<int>()을 사용하십시오.

+1

정말 고마워요. 그 정의를 AddOpenIddict 메서드에서 일치시켜야한다는 것을 몰랐습니다. 완벽하게 작동합니다. – Geekn