2014-06-10 1 views
0

REST API에서 OAuth 2를 사용하고 내 액세스 토큰이 유효하지 않은 경우 내 API가 401 오류를 반환합니다. 나의 401 응답은 지금 의미가 없으며 응답에 내 인증 URI를 배치 할 수 있을지 궁금합니다. 예 :인증 오류를 401 오류 응답으로 노출해야합니까?

{ 
    "error": 401, 
    "authentication_uri": "https://example.com/login?client_id=123&response_type=token&redirect_uri=http://example.com/app/" 
} 

내가 할 수 있을까? 이거 안전한가요? (이 모든 매개 변수는 URL에 어쨌든 노출되어있는 것처럼 보입니다 ...) 401에서 의미있는 응답을 얻는 다른 일반적인 방법이 있습니까? 나는이 주제에 대해 유용한 것을 발견 할 수 없었다.

+0

음 ... 왜 인증 헤더가 아닌 인증 URI를 사용하고 있습니까? 401 응답은 사용할 인증 스키마가있는 WWW-Authenticate 헤더를 반환해야합니다. 당신이 바퀴를 두 번 다시 발명하고있는 것처럼 보입니다. –

+0

음,이 대화는 최근에 많이 있습니다 (여기를 참조하십시오 : http://stackoverflow.com/questions/24039340/why-is-the-http-location-header-only-set-for-post-requests-201- created-respons). 나는 개인적으로 모든 링크에 대해 HTTP 헤더 만 사용하고 싶지만 조만간 JSON 응답의 링크가 필요할 것입니다. 따라서 JSON 응답에서 항상 의미가 있고 연결되는 HTTP 헤더가 일관되게 유지됩니다. . 많은 새로운 사양이 이것을 선호하는 것 같습니다. – Pipo

+0

방금 ​​전에 본인이 다른 사람의 링크에서 저에게 답장을 보냈습니다. – Pipo

답변

1

나는 이 아니고 보안 전문가이지만이 작업을 수행하는 데 문제가 없습니다. 나는 인증 방법을 숨기는 데있어서 어떤 가치가 있는지 알지 못하며, 이미 가지고 있지 않은 것을 노출하는 것을 보지 못한다. (client_id와 redirect_uri가 원래 요청에 있다고 가정 할 때).

+0

client_id 및 redirect_uri는 초기 요청에 포함되지 않았습니다. 어쩌면 초기 요청은 https://api.example.com/users/1이었고 401이 생겼습니다. authentication_uri가 변경되면이 기능이 도움이 될 것이라고 생각합니다. (아마도 내 API 용 디버그 버전을 사용하기 때문에 - API에 대한 기본 URL이 필요하며 미리 인증 URL을 알 필요가 없습니다. – Pipo

0

내 자신의 질문에 대답하십시오. 인증 URI를 미리 알 필요가 없으므로 확실하게이를 수행 할 수 있지만 이점이 있지만 몇 가지 함정이 있습니다.

http://localhost에 여러 개의 앱을 별도로 개발하고 동일한 REST API를 전달하려고한다고 가정 해 보겠습니다. REST API는 항상 http://localhost이므로 Referer 또는 Origin 헤더 필드에서 client_id을 추론 할 수 없습니다. "App 1"또는 "App 2"를 개발할 수 있으며 각각은 client_id입니다. 따라서 당신은 URI templates을 지원해야합니다. 예 :

{ 
    "error": 401, 
    "authentication_uri": "https://example.com/login?redirect_uri=http://localhost&response_type=token{&client_id}" 
} 

URI 템플릿에 대한 자세한 내용은 here을 참조하십시오.