2017-12-12 3 views
0

웹 API 컨트롤러에서 [Authorization] (Azure AD 인증)을 건너 뛰는 방법은 헤더 요청의 값에 따라 다릅니 까?웹 API에서 Azure 활성 디렉토리 인증을 건너 뛰는 방법 URL 요청 헤더 값에 따라 달라짐

[Authorize] 
public class ExampleController : ApiController 
{ 
//code 
private string _clientid; 
var req = Request.Headers; 

_clientid = string.IsNullOrEmpty(req.GetValues("clientid").First()) 
         ? null : 
         req.GetValues("clientid").First(); 
} 

위의 _clientid는 헤더 값이므로 _clientid 값에 대한 인증을 생략하고 싶습니다.

답변

0

제 생각에는 본질적으로 다른 인증 방법이 있습니다.

그것은 그 기반으로 사용자 주체를 해당 헤더를 확인하고 만들어 자신의 인증 방식을 정의하는 가장 적합한을 만들 것입니다.

그럼 당신은 평소와 같이 [Authorize]를 사용하여 유지할 수 있습니다.

예제를 작성하는 데는 많은 시간이 소요될 수 있습니다. 현재 내가 제공 할 수있는 가장 좋은 방법은 JWT 무기명과 같은 기본 제공 인증 체계가 모두 포함 된 Security repo입니다. https://github.com/aspnet/Security/blob/dev/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs 인증 핸들러를 구현한다.

+0

커스텀 인증 대신 헤더 값에 의존하는 그 컨트롤러의 커스텀 라우팅을 할 수 있습니까? –

+0

인증 된 사용자가 있는지를 확인하는 일종의 미들웨어로 수행 할 수 있습니다. 요청 경로가 MVC에 도달하기 전에 요청 경로를 변경합니다. 그러나 나는 여전히 프레임 워크 도구를 사용하는 대신 모든 프레임 워크 도구를 사용할 수 있으므로 접근 방법을 권장 할 것입니다. – juunas

0

당신은 하나 here 유사한 사용자 정의 인증 처리기를 만들 수 있습니다.

services.AddAuthorization(
      o => 
      { 
       // create a policy called ApiKeyPolicy which requires a Role defined in 
       // ApiKeyAuthenticationOptions. 
       // The policy is used by the API controllers. 
       o.AddPolicy(
        "ApiKeyPolicy", builder => 
        { 
         builder.AddAuthenticationSchemes(
          ApiKeyAuthenticationOptions.AuthenticationSchemeName); 
        }); 
      }); 

을하고 services.AddAuthentication 빌더 계획을 추가합니다 : 당신이 Startup.cs에 권한을 추가 그리고

, 당신은 다음과 같이 사용자 지정 정책을 추가 할 수 있습니다

builder.AddScheme<ApiKeyAuthenticationOptions, ApiKeyAuthenticationHandler>(
      "ApiKey", "ApiKey", o => 
      { 
       o.AllowedApiKeys = config["Api:AllowedApiKeys"]; 
       o.ApiKeyHeaderName = config["Api:ApiKeyHeaderName"]; 
      }); 

내 예에서 일부 API 키와 확인 할 http 헤더 이름으로 구성된 ApiKeyAuthenticationOptions 클래스가 있습니다. 귀하의 경우에는 유효한 클라이언트 ID가 필요할 것입니다. 당신이 정기적를 추가 할 수 있도록

귀하의 경우
[Authorize(Policy = "ApiKeyPolicy")] 

, 당신은 클라이언트 ID 및 일반 인증을 모두 처리 할 수 ​​있도록하려면 :

마지막으로, 당신은 정책이 필요한 [Authorize] 속성을 알려줄 필요 auth 스킴을 정책 빌더 표현식 (위의 첫 번째 스 니펫)에 추가하십시오.

관련 문제