2016-10-05 9 views
2

데몬 응용 프로그램을 사용하여 사용자의 OneDrive for Business 계정에 큰 파일을 업로드하려고합니다. 나는 인증하고 무기 토큰을 얻고, 폴더를 만들고 작은 파일을 업로드 할 수 있었다.Microsoft Graph를 사용하여 UploadSession에서 401 오류 발생

대용량 파일의 경우 업로드 세션을 만들고 해당 세션을 사용하여 파일 파트를 추가하려고 할 때 오류가 발생합니다. 이 문제를 진단하기 위해 내 피 들러 추적을 포함 시켰습니다. 중요한 정보를 삭제했습니다. 나는 그런 다음 업로드 URL

PUT https://{my tenant name}.sharepoint.com/personal/name_domain_co_za/_api/v2.0/drive/root:/Backups/Test:/uploadSession?guid='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'&path='~tmp12_Test.csv'&overwrite=True&rename=False HTTP/1.1 
Authorization: bearer {bearer token} 
Content-Range: bytes 0-327679/16333102 
Host: {my tenant name}.sharepoint.com 
Content-Length: 327680 
Expect: 100-continue 

응답에 PUT 시도하십시오

"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.uploadSession", 
"expirationDateTime":"2016-10-05T11:39:29.5104044Z", 
"nextExpectedRanges":["0-"], 
"uploadUrl":"https://{my tenant name}.sharepoint.com/personal/name_domain_co_za/_api/v2.0/drive/root:/Backups/Test:/uploadSession?guid='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'&path='~tmp12_Test.csv'&overwrite=True&rename=False"} 

:

나는

POST https://graph.microsoft.com/v1.0/users/{user id}/drive/items/{folder id}:/Test.csv:/createUploadSession HTTP/1.1 
Authorization: Bearer {bearer token} 
Content-Type: application/x-www-form-urlencoded 
Host: graph.microsoft.com 
Content-Length: 0 

나는 다음과 같은 내용으로 응답을받을 업로드 세션을 요청 다음과 같은 관련 행을 포함합니다.

HTTP/1.1 401 Unauthorized 
x-ms-diagnostics: 3000006;reason="Token contains invalid signature.";category="invalid_client" 

{"error_description":"Invalid issuer or signature."} 

나는 권한을 가진 아무 잘못이 안된다, 내가 뭔가를 오해하고있어하지 않는 한 현재 응용 프로그램 구성으로, 나는 성공적 때문에 동일한 경로에 작은 파일을 업로드 할 수 있기 때문에 매우 이상한 찾을 수 있습니다.

+0

동일한 문제에 대해 [github] (https://github.com/microsoftgraph/microsoft-graph-docs/issues/495#issuecomment-253028580)에 스레드가 있습니다. 여기에 해결 방법이있을 때 여기에 추가 할 것입니다. –

답변

0

업데이트 : 실제 문제는 요청이 사용하려고 한 것이 었습니다
응용 프로그램을-만에
토큰 그래프를 통해 OneDrive for Business로 인증하십시오. 불행하게도이 시나리오는 현재 지원되지 않으며 일부 시나리오는 작동하지 만 (예 :이 같은 시나리오는 아닙니다.) 우리가 타임 라인에 대해 언급 할 수는 없지만 확실히 우리 레이더에 있습니다! 원래

: 그래프를 통해 비즈니스 계정의 원 드라이브에 조각을 업로드에 고려 몇 가지가 있습니다
.

  1. 인증 토큰은 호환되지 않습니다. 다시 말해, 그래프에서 createUploadSession을 호출하는 데 사용하는 무기명 토큰은 OneDrive for Business 엔드 포인트에 직접 도달 한 PUT 요청에는 사용할 수 없습니다. 이는 주로 토큰이 특정 사용자에게 연결되어 있기 때문에 발생합니다. https://graph.microsoft.com/ 토큰은 https://{my tenant name}.sharepoint.com/에서 작동하지 않습니다.

  2. # 1로 인해, 반환 된 uploadUrl은 실제로 처음부터 인증을 요구해서는 안됩니다. 개발자가 다른 끝점에 대해 여러 인증 토큰을 사용하는 것을 원하지 않습니다.

# 2는 당신이 윤곽을 말한 repro에 맞지 않은 것 같습니다. 수신중인 uploadUrl 값에 검색어 매개 변수가 access_token 또는 prooftoken이 아닌지 확인할 수 있습니까? 그렇다면 createUploadSession 호출의 응답에서 request-id 헤더를 얻을 수 있습니까?

+1

PUT 요청에 무기명 토큰을 두지 않으면 403 금지가 발생합니다. uploadUrl에는 "guid", "path", "overwrite"및 "rename"쿼리 문자열 매개 변수 만 있습니다. createUploadSession의 요청 ID는 1f7f8c78-ed0d-40ac-9fd0-e6f3c0631989 –

+0

이며,이 문제를 해결하는 데 불편을 끼쳐 드려 죄송합니다. 요청을 찾는 데 문제가 있습니다. 요청한 시간 (UTC가 바람직 함)이 있으십니까? 상관 관계를 유지하는 데 도움이됩니다. – Brad

+0

도움을 주셔서 감사합니다. 나는 지금 또 다른 요청을했다. Fri, 2016 년 10 월 14 일 20:47:45 GMT bdc93a86-84f8-4bed-9d7c-dbd3ce8ba98f –

0

동일한 문제 : 작은 파일 업로드가 올바르게 수행됩니다.

큰 파일을 업로드하려면 베타 엔드 포인트 "https://graph.microsoft.com/beta"이 "업로드 세션"을 달성하는 데 사용됩니다. 이 요청이 성공했습니다.

그러나 "업로드 세션"URI를 사용하는 경우, HTTP의 PUT 명령이 실패 :

X-MS-진단 : 3000006, 이유는 = ". 토큰이 유효하지 않은 서명이 포함"; 카테고리 = "invalid_client"

이 큰 파일을 전송하는 C# 코드입니다 :

using (var client = new HttpClient()) 
{ 
    byte[] sContents = File.ReadAllBytes(@"<MYLARGEFILE>"); 
    long length = sContents.Length; 
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessTokenGraphMicrosoft); 
    var content = new ByteArrayContent(sContents); 
    content.Headers.Add("Content-Length", length.ToString()); 
    var response = client.PutAsync(<UPLOADSESSIONURI>, content).Result; 
} 
+0

입력 해 주셔서 감사합니다. 너는 무엇을 업로드하려고합니까? Onedrive/Onedrive for Bus./Sharepoint Folder? –

+0

안녕하세요. 나는 Onedrive for Business를 타겟팅하여 Sharepoint URI를 받았습니다. : o Office365 구현에서 해당 디렉토리에 임시 파일을 만들었습니다. – Jens