2

내 SPA 애플리케이션 (Aurelia 사용)이 ASP.NET Core 2 Web API를 호출합니다. Google OIDC 제공 업체를 통해 사용자를 인증하고 동일한 방법으로 웹 API를 보호해야합니다.SPA (Aurelia) + ASP.NET Core WebAPI + Google 인증

현재 클라이언트 (SPA) 측에서 사용자를 인증하고 ID 토큰 및 액세스 토큰을 검색 할 수 있습니다. 각 API 호출과 함께 헤더에 액세스 토큰을 보냅니다.

이제 토큰의 유효성을 검사하고 API에 대한 액세스를 허용하거나 거부하기 위해 서버 측을 처리하는 방법을 잘 모르겠습니다. 공식적인 문서에서 외부 로그인 공급자를 추가하는 방법을 따랐지만 서버 측 MVC 애플리케이션에서만 작동하는 것으로 보입니다.

이 작업을 수행하는 쉬운 방법이 있습니까?

예를 들어 IdentityServer4가이 시나리오를 지원할 수 있다고 생각하지만 너무 복잡해서 내가해야 할 일이있는 것처럼 보입니다. 결국 내 자신의 ID/권한 부여 서버가 필요하지 않습니다.

는 업데이트 :

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(o => 
    {   
    o.Authority = "https://accounts.google.com"; 
    o.TokenValidationParameters = new TokenValidationParameters 
    { 
     ValidIssuer = "accounts.google.com", 
     ValidAudience = "xxxxxxxxxxxxx.apps.googleusercontent.com", 
     ValidateAudience = true, 
     ValidateIssuer = true 
    }; 
    }); 

    services.AddMvc(); 
} 

을 그리고 Configure()에 나는 app.UseAuthentication() 전화 : 미로슬라프 포포비치의 답변에 따라

는 ASP.NET 코어 2.0 내 구성은 다음과 같다.

이 설치를 사용할 때 오류 메시지가 표시됩니다. 토큰에 사용할 수있는 SecurityTokenValidator가 없습니다.

업데이트 2 : 나는 그것을 작동하게

. 서버 구성이 정확합니다. 문제는 id_token 대신 API에 access_token을 보냈다는 것입니다.

답변

1

이미 액세스 토큰이 있으므로 인증을 추가하는 데 사용하기가 너무 어려워서는 안됩니다. 좀 더 도움이 될

// Inside Startup.cs, ConfigureServices method 
services 
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) 
    .AddJwtBearer(
     options => 
     { 
      var tokenValidationParameters = new TokenValidationParameters 
      { 
       ValidIssuer = "accounts.google.com", 
       ValidateAudience = false 
      }; 

      options.MetadataAddress = "https://accounts.google.com/.well-known/openid-configuration"; 
      options.TokenValidationParameters = tokenValidationParameters; 
    }); 

// Inside Startup.cs, Configure method 
app.UseAuthentication(); // Before MVC middleware 
app.UseMvc(); 

// And of course, on your controllers: 
[Authorize] 
public class MyApiController : Controller 

This post 폴 로우에서,하지만이 ASP.NET 코어 1.x 및 인증 API를 위해 작성 2.0에서 약간 변경된 참고 : 당신은 (하지 테스트)이 라인을 따라 뭔가를해야합니다.

this question처럼 많은 정보가 여기에 있습니다.

+0

도움 주셔서 감사합니다. 나는 (2.0에 맞게) 코드를 시도했지만 서버가 "토큰에 사용할 수있는 SecurityTokenValidator가 없습니다."라는 메시지와 함께 실패합니다. 왜 SPA에서 게시하는 토큰이 Google에서 직접 제공되는지 확실하지 않습니다. –

+0

원래 질문을 현재 코드로 업데이트했습니다. –

+0

나는 당신이 그것을 일하게 만들었다는 것을 알았다. –