2016-10-12 5 views
1

엔드 포인트를 공개로 공개하는 좋은 전략은 무엇입니까? Taffy API는 모든 엔드 포인트에서 인증을 갖지만 인증없이 일부 엔드 포인트를 노출하고자합니다. 나의 초기 전략은 인증을 우회 할 수있는/public이라는 리소스에 다른 폴더를 생성하는 것입니다.엔드 포인트를 공용으로 표시

두 가지 인증 방법이 있습니다. 요청에 2. 기본 인증

우리 onTaffyRequest를 API 키를 사용하여 1. 인증합니다

function onTaffyRequest(verb, cfc, requestArguments, mimeExt){ 
      local.status = "forbidden"; 
      local.invalidReturnData = representationOf(local.status).withStatus(401); 


      if(structKeyExists(arguments.requestArguments, "apiKey")){ 

      } 


      /* CATCH NO BASIC auth*/    
      //if username is blank return false 
      if (structAuth.username is ""){ 
       return local.invalidReturnData; 
      } 

      //check invalid password 
      if(structAuth.password is ""){ 
       return local.invalidReturnData; 
      } 

    return true; 
} 

답변

3

태피 version 2.1.0 때문에, onTaffyRequest 더 인수 받아 들일 수 : 또한 추가

function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers, methodMetadata){ 
    ... 
} 

(Version 3.0.0를 이 목록의 전화 번호 matchedURI)

이 목적으로 methodMetadata 인수가 추가되었습니다. allow_public="true"과 같은 것을 추가하고이를 검사하십시오.

someResource.cfc :

component 
extends="taffy.core.resource" 
taffy:uri="/foo" 
{ 
    function get() allow_public="true" { 
     return rep({ echo: arguments }); 
    } 
} 

Application.cfc :

function onTaffyRequest(verb, cfc, requestArguments, mimeExt, headers, methodMetadata, matchedURI){ 
    if (methodMetadata.keyExists("allow_public") && methodMetadata.allow_public == true){ 
     return true; 
    } 

    // your existing auth-enforcement code should go here 
} 
+0

남자, 말의 입에서. – Leeish

+0

methodMetadata.keyExists ("allow_public")가 CF10에서 작동하지 않았습니다. if (StructKeyExists (methodMetadata, "allow_public") && methodMetadata.allow_public == true)로 변경하고 이제는 훌륭하게 작동합니다. 감사합니다 – Vlad

+0

예, ACF 버전을 나타내지 않았으므로 가장 최근의 구문이 좋다고 가정했습니다. 다행스럽게 생각 했어. –

관련 문제