2016-10-05 2 views
0

저는 AngularJS를 기반으로 테스트 사이트를 운영 중이며 Forge OAuth를 얻는 데 문제가 있습니다. 여기 그것은 밖으로 erroring의 I 만들기 위해 노력하고있어 요청 ...AngularJS를 사용하는 Autodesk Forge OAuth : No 'Access-Control-Allow-Origin'헤더가 있습니다.

$http({ 
    method: 'POST', 
    url: 'https://developer.api.autodesk.com/authentication/v1/authenticate', 
    data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type:client_credentials&scope=data:read', 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 
    withCredentials: false 
}).then(function (r) { 
    authToken = r.access_token; 
    toastr.success('success'); 
}, function (e) { 
    toastr.error('fail'); 
}); 

는 다음과 같습니다

XMLHttpRequest cannot load https://developer.api.autodesk.com/authentication/v1/authenticate. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 500. 

나는 이것이 내가 대한 전문가가 아니라 해요 CORS 관련 문제, 알고있다. $ http.post()를 사용하여이 작업을 수행 할 수 있습니까? 그렇지 않은 경우 Angular를 사용하여 인증하려면 어떻게해야합니까?

답변

2

각도 클라이언트 측에서 $ http를 호출한다고 가정합니다. 호출이 성공했는지 여부에 관계없이 코드에서 클라이언트 ID와 암호를 공유하는 것이 좋지 않다는 점을 여기서 언급해야합니다. 누구나 자바 스크립트 코드를 읽고 키를 훔쳐 낼 수 있습니다. 일단 액세스 키를 사용하면 액세스 토큰을 요청하고 계정을 사용하여 파일을 처리하고 청구서를 지불 할 수 있습니다. 이는 Twitter 나 Google지도 등 무료 또는 유료 웹 서비스에 유효합니다. 클라이언트 측에서 키를 절대로 절대로 사용하지 마십시오. 대신 서버에서 엔드 포인트를 사용하십시오. => grant_type = CORS 문제에 대한

이 :

data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type:client_credentials&scope=data:read', 

아마

data: 'client_id=' + token.clientId + '&client_secret=' + token.secret + '&grant_type=client_credentials&scope=data:read', 

grant_type을해야한다 :

는 지금, 나는 오류가 데이터 문자열 형식이 생각 브라우저에서이 엔드 포인트에 대한 http 요청을 호출하고 있기 때문입니다. 브라우저에서 보낸 Origin 헤더를 살펴보면 특정 내용임을 알 수 있습니다. 인증 헤더를 받으면 CORS 문제는 사라질 것입니다.

도움이 되길 바랍니다.

관련 문제