2017-10-26 3 views
0

Opendidict를 사용하여 구성한 인증/권한 부여 및 기타 도메인 관련 기능을 위해 백엔드 마이크로 서비스 (코어 2.0에서 개발 됨)와 통신하는 모바일 (기본) 및 웹 앱 (SPA)이 있습니다. 두 앱 모두 액세스 토큰을 받고 있습니다. 내가 고민하는 것은 모든 마이크로 서비스가 베어러 액세스 토큰 및 인증/권한 부여 (중앙 인증 서비스), 인증 마이크로 서비스 (OpenIddict 2. *)에서 생성 된 액세스 토큰을 받아 들여야한다는 것입니다. 그렇다면 REST API에 [승인]이라고 표시된 마이크로 서비스에는 어떤 변경 사항이 누락 되었습니까? 인증의 Microservice에서OpenIddict - 마이크로 서비스를 통한 인증 및 인증

코드 : 알림 Microservice에서

public void ConfigureServices(IServiceCollection services) 
{ 
    var connection = Configuration.GetConnectionString("DefaultConnection"); 

    services.AddDbContext<IdentityDbContext>(options => 
    { 
     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")); 
     options.UseOpenIddict(); 
    }); 

    services.AddAuthentication().AddOAuthValidation(); 

    services.AddOpenIddict(options => 
    { 
     options.AddEntityFrameworkCoreStores<IdentityDbContext>(); 
     options.AddMvcBinders(); 
     options.EnableTokenEndpoint("/connect/token"); 
     // Enable the password flow. 
     options.AllowPasswordFlow().AllowRefreshTokenFlow(); 
     options.SetRefreshTokenLifetime(TimeSpan.FromHours(1)); 
     options.DisableHttpsRequirement(); 
    }); 

    services.AddDbContext<AuthDbContext>(options => options.UseSqlServer(connection)); 
    services.AddScoped<IUserRepository, UserRepository>(); 

    services.AddAuthentication(options => 
    { 
     options.DefaultScheme = OAuthValidationDefaults.AuthenticationScheme; 
    }); 

    services.AddAuthorization(options => 
    { 
     options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Administrator")); 
    }); 
} 

기존 코드

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDbContext<MastersDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

    services.AddAuthentication().AddOAuthValidation(); 

    services.AddAuthentication(options => 
    { 
     options.DefaultScheme = OAuthValidationDefaults.AuthenticationScheme; 
    }); 

    services.AddAuthorization(options => 
    { 
     options.AddPolicy("RequireAdministratorRole", policy => policy.RequireRole("Administrator")); 
    }); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.UseCors(builder => 
     builder.WithOrigins("*") 
      .AllowAnyHeader() 
      .AllowAnyMethod() 
      .AllowAnyOrigin() 
    ); 

    //app.UseAntiforgeryToken(); 
    app.UseMvc(); 
    app.UseAuthentication(); 
} 

알림 컨트롤러 :

토큰이 제대로 모든 마이크로 서비스로 해독 할 들어
// POST api/values 
[HttpPost] 
[Authorize] 
public IActionResult Post(Notification notification) 
{ 
    //logic 
    return Ok(); 
} 

답변

0

, 마스터 키가 들어있는 키 링 (th at는 ASP.NET Core Data Protection에서 파생되어 암호화 및 유효성 검사 키 생성) 올바르게 동기화됩니다. 절차는 여기에 설명되어 있습니다 : https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview.

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddDataProtection() 
     .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\")) 
     .SetApplicationName("Your application name"); 
} 
+0

: 당신은 같은 "응용 프로그램 판별"를 사용하는 두 개의 응용 프로그램을 구성해야합니다

public void ConfigureServices(IServiceCollection services) { services.AddDataProtection() .PersistKeysToFileSystem(new DirectoryInfo(@"\\server\share\directory\")) } 

: 여기

는이 공유 폴더를 사용하여 수행 할 수있는 방법의 예 답장을 보내 주셔서 감사합니다. 필자의 경우 마이크로 서비스가 Docker에서 호스팅되므로 공유 폴더를 사용하기가 어려울 수 있습니다. JwtBearer를 사용하여 들어오는 토큰을 인증하기 위해 ConfigureAuthService를 사용하는 샘플을 보았습니다. Authority 값을 AuthUrl로 설정하여 인증이 완료된 것처럼 보입니다. OpenIddict를 사용하여 동일한 결과를 얻을 수 있습니까? – Satish

+0

@ Satish 가능합니다. 서명 인증서를 등록하고 OpenIddict가 JWT 액세스 토큰을 발행하게하려면'options.UseJsonWebTokens()'를 호출하십시오. 그런 다음 JWT 처리기로 OAuth2 유효성 처리기를 바꾸면 제대로 작동합니다. – Pinpoint

+0

ConfigureAuthService { JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); var identityUrl = Configuration.GetValue ("AuthUrl"); services.AddAuthentication (옵션 => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; }) AddJwtBearer (옵션 => { options.Authority = identityUrl; options.RequireHttpsMetadata = 거짓; }).; } – Satish