2016-06-15 3 views
0

토큰 요청의 서식을 지정하는 데 도움이 필요합니다. 내가 봤 거든 주위에 수많은 문서를 보았다. Fiddler 응답은 "grant_type"에 대해 소리 지르고 있지만 포함되어 있습니다.oauth 2.0 - Microsoft 인증 서버

var data = { 'grant_type': 'password', 
    'username': userID, 
    'password': password, 
    'client_id': clientId 
}; 

하는 게시물 피들러하기 :

POST http://localhost:4400/ripple/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=https%3A//login.microsoftonline.com/[removed]/oauth2/token HTTP/1.1 
Host: localhost:4400 
Connection: keep-alive 
Content-Length: 104 
Authorization: Basic YWZyaWVkOnRlc3Q= 
Origin: http://localhost:4400 
Content-Type: text/plain;charset=UTF-8 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 
X-Ripple-User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.2; en-us; Nexus S Build/GRH78C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Accept: */* 
Referer: http://localhost:4400/login.html 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 

grant_type='password'&username='afried'&password='test'&client_id='[removed]' 

내가도 (내가 그것을 stringifying 시도) (예를 들어, grant_type = 비밀번호)를 '없이 그들을 전송뿐만 아니라 객체를 생성 시도 인증 헤더는 사용자 이름입니다

[object Object] 

과 같이 비밀번호, 나는 암호를 부여하여, 먼저 인증 엔드 포인트를 타격하지 않고 토큰 엔드 포인트에서 직접 요청할 수있는 인상이다 사용자 이름/비밀번호를 전송하고 있기 때문입니다.

.withCredentials = true입니다. 콘텐츠 보안 정책도 괜찮습니다.

도움을 주시면 감사하겠습니다. 나는 그것이 단순한 무엇인가 알고있다, 나는 단지 그것을 볼 수 없다. 그리고 나는 내가 경험을 가지지 않고있다라고 생각한다, 아무것도 나에서 뛰어 내리고있다.

+0

콘텐츠 형식 헤더를 설정해야하는 것처럼 보입니다. 나는 grant_type 문제를 지나쳤지만 지금은 "리소스"를 원합니다 ... 여전히 그것에 대해 노력하고 있습니다. 그러나 그 대답은 간단하게 "Content-Type 헤더를 추가합니다. [나는 application/x-www-form-urlencoded를 사용했습니다. 그것은 작동하는 것으로 보입니다. " – Aaron

답변

0

다른 사람들에게 바람을 일으 킵니다. 이것은 특정 답변이지만, 사용자 이름/암호 부여 (grant_type = password)와 비슷한 문제가있는 경우, 이것이 나를 위해 일한 것입니다.

1 -/oauth2/token에서 직접 토큰을 얻을 수 있습니다. 먼저 승인 할 필요가 없습니다. 사용자 이름/암호를 보내므로 선점 단계가 필요하지 않습니다.

2 요청 헤더 - 인증 - 기본 +의 base64encode 사용자 이름 : 암호 - 콘텐츠 - 유형 -을 application/x-www-form은-urlencoded를 - 심지어 모바일 애플 리케이션을위한, JSON이 작동하지 않습니다, 잘못된 요청합니다.

3 withCredentials = true (내가 테스트하지 않았지만, 모바일에 항상 필수입니다. 항상 틀렸을 경우 수정하십시오.) . -

4 정확한 형식 내가 POST 데이터에 사용 :

var data = 
    "resource=http://[serviceName].azurewebsites.net" + 
    "&grant_type=password" + 
    "&username=" + userID + "@[xxx].onmicrosoft.com" + //so they don't have to type it. This is sufficient for my company and app. 
    "&password=" + password + 
    "&client_id=" + clientId + 
    "&response_type=token"; 
var dataFinal = encodeURI(data); //in case. Didn't test without. 

request.send(dataFinal); 

실제로 내가 그들을 보내 내가 지난 리소스를 보냈을 때 순서를 중요 듯, 나는 메시지 "라는 응용 프로그램을 [찾을 수 없습니다를 받고 유지 servicename] .azurewebsites.n "(마지막 2자를 트리밍했습니다). 그것은 매우 버그가있는 것 같다. Microsoft가 응답을 보내는 방식에 문제가있을 수 있지만 잘못되었습니다. 그래서 언급하고 있습니다.