0

Outlook addin을 개발하고 있습니다. JS 기반으로 OAuth2를 사용하여 사용자를 인증합니다. poupp 창을 사용하여 Google, azure ...와 같은 승인 페이지를 엽니 다. 성공 로그인 후 닫습니다. 다시 응용 프로그램으로 이동하려면 팝업의 부모 창에 window.opener 속성을 통해 액세스 할 수있는 콜백 함수를 등록합니다. 모든 것이 잘 작동하지만 모바일 장치를 지원하고 싶습니다. Play 스토어를 통해 다운로드 할 수있는 OWA for Device 앱을 통해 이러한 종류의 추가 기능을 실행할 수 있습니다. window.opener 속성은 항상 null입니다. 그래서 나는 다시 신청할 수 없다. 응용 프로그램으로 다시 전화하는 다른 방법이 있습니까? 팝업의 상위 창에 액세스하는 방법?OAuth2 인증 js 클라이언트

+0

JS에서 Outlook 추가 기능을 만드는 경우 왜 OAuth를 만드시겠습니까? 그것 없이는 outlook rest API를 만들 수 있습니다. https://dev.office.com/docs/add-ins/outlook/use-rest-api?product=outlook – OriEng

+0

@OriEng이 응용 프로그램은 타사 시스템에서 일부 데이터를 검색합니다. 어떤 인증이 필요합니다. 이 타사 시스템에 대해 사용자를 인증하려면 oauth가 사용됩니다. O365 나머지 API 끝점을 호출하지 않습니다. – thadam

+0

이제 알겠습니다. 모바일에서의 지원은 추가 기능에 대해 매우 제한적이라는 것을 알고 있습니다. 아마 MDN 포럼에서 모바일 지원에 대한 자세한 정보를 찾을 수 있습니다. https://social.msdn.microsoft.com/Forums/office/en-US/home? forum = appsforoffice – OriEng

답변

1

올바른 문제 해결 방법은 WebSockets입니다. 단일 클라이언트에 자격 증명을 게시하고 있는지 확인할 수 있습니다. 클라이언트 - 사용자가 다시 귀하의 웹 사이트에 OAuth는 경험에서 리디렉션되면

웹 사이트,

var socket = io('http://localhost'); 
var email = Office.context.mailbox.userProfile.email; 
socket.on('oauth_providerName_'+email, function(data){ 
    // Callback when you receive the credential data. 
}); 

// Pop the user to the OAuth frame 

: - 웹 추가 기능에서 소켓

추가 기능을 시작하는 클라이언트 자바 스크립트는 같아야합니다 자바 스크립트

var socket = io('http://localhost'); 
var email = Office.context.mailbox.userProfile.email; 
socket.emit('oauth_cred_providerName_'+email, {credentials}); 

서버 - 선택한 언어에 따라 소켓을 통해 클라이언트를 추가 기능 클라이언트로 전달합니다.

그래서 이상적으로 여기에 3 명을 가지고있다

  1. 추가 기능 자바 스크립트 (쿠키 GUID 또는 이메일 주소와 같은 고유 한 값을 할 수 있습니다) 특정 데이터와 자격 소켓을 감지
  2. OAuth가 완료된 후 리디렉션되는 웹 페이지. 소켓을 통해 자격 증명 (액세스 토큰/새로 고침 토큰)이 서버로 전달됩니다. (추가 기능을 사용하여 배포 한 페이지로 계속 호스팅 할 수 있습니다. 중요한 점은 별도의 JS 파일이 있어야한다는 것입니다.
  3. 자격 증명을 가져와 추가 기능 클라이언트에 전달하는 서버 소켓.
+0

예, 작동 할 수있는 것처럼 보입니다. 나는 또한 일할 수있는 가능성을 발견했다. Office.js는 Office.context.ui. *를 통해 팝업을 표시하고 메시지를 보내 응용 프로그램으로 다시 통신 할 수있는 API를 제공합니다. – thadam

+0

이것이 문제를 해결한다고 생각한다면 대답으로 표시 하시겠습니까? –