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();
}
: 당신은 같은 "응용 프로그램 판별"를 사용하는 두 개의 응용 프로그램을 구성해야합니다
: 여기
는이 공유 폴더를 사용하여 수행 할 수있는 방법의 예 답장을 보내 주셔서 감사합니다. 필자의 경우 마이크로 서비스가 Docker에서 호스팅되므로 공유 폴더를 사용하기가 어려울 수 있습니다. JwtBearer를 사용하여 들어오는 토큰을 인증하기 위해 ConfigureAuthService를 사용하는 샘플을 보았습니다. Authority 값을 AuthUrl로 설정하여 인증이 완료된 것처럼 보입니다. OpenIddict를 사용하여 동일한 결과를 얻을 수 있습니까? – Satish@ Satish 가능합니다. 서명 인증서를 등록하고 OpenIddict가 JWT 액세스 토큰을 발행하게하려면'options.UseJsonWebTokens()'를 호출하십시오. 그런 다음 JWT 처리기로 OAuth2 유효성 처리기를 바꾸면 제대로 작동합니다. – Pinpoint
ConfigureAuthService { JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); var identityUrl = Configuration.GetValue ("AuthUrl"); services.AddAuthentication (옵션 => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; }) AddJwtBearer (옵션 => { options.Authority = identityUrl; options.RequireHttpsMetadata = 거짓; }).; } –
Satish