2017-09-13 1 views
2

현재 내가 만들고있는 Flutter 앱에서 사용자 지정 (Google/Facebook/Twitter/기타 사용자가 아닌) 인증 서버에 대해 사용자를 인증해야합니다.Oauth2가 플러터 앱에 있음

이렇게하려면 사용자가 웹 페이지에서 자격 증명을 입력해야합니다. 이를 위해 WebView-plugin을 사용할 수 있습니다. 그러나 사용자가 인증 된 후 페이지가 리디렉션되면 WebView가 닫히고 코드가 WebView를 처음 호출 한 (Flutter) 함수에 전달됩니다.

이미 몇 가지 조사를 수행하는 데, 나는 다음과 같은 옵션 건너 온 :

  • This blog post가 수동으로 내 의견으로는 (진정한 해결책이 아니다 창을 닫으려면 사용자가 필요로하는 로컬 서버를 사용).
  • This issue은 모든 OAuth 제공자와의 통합을 표시하지만 브라우저 내부의 사용자 인증에 대한 세부 정보는 제공하지 않습니다.
  • This issue은 정확히 설명하는 것처럼 보이지만 하단에는 WebView 플러그인이 WebView를 닫는 방법을 제공한다는 내용이 나와 있습니다. 실제로는 close() -function 인 반면 리디렉션 URI에서이를 트리거하고 인증 코드를 반환하는 방법을 찾을 수 없습니다.

리디렉션 URI가 열리면 브라우저를 자동으로 닫고 (또한 인증 코드를 반환하는) 솔루션이 있습니까?

미리 감사드립니다.

답변

2

나는 이것을 시도하지 않았지만 FlutterWebviewPlugin을 사용하여 사용자를 https://www.facebook.com/v2.8/dialog/oauth?client_id={app-id}&redirect_uri=fbAPP_ID://authorize과 같은 URL로 보냅니다. 그런 다음 application:openURL:options: (iOS) 및 onNewIntent (Android)에 네이티브 핸들러를 추가하고 AndroidManifest.xmlInfo.plist을 수정하여 fbAPP_ID 스키마에서 URL을 수신하도록 앱을 등록합니다. 플랫폼 채널을 사용하여 딥 링크 매개 변수를 다시 Dart-land로 전달하고 Dart 측면의 webview에서 close()으로 전화 할 수 있습니다.

+0

이것은 결국 우리가 한 일이지만 보안상의 이유로 WebView 대신 기본 브라우저에서 URL 시작 프로그램을 사용했습니다. 예를 들어 AndroidManifest.xml은 URI 데이터를 방금 확인한 활동에 URL을 연결하고 채널을 사용하여 전송 한 다음 자체를 닫습니다. 감사! –

+0

@RickdeVries 어떤 보안상의 이유로? AFAIK 외부 브라우저는 "비공식적 인"클라이언트 (예 : 인증 및 클라이언트/앱이 동일한 엔티티에서 소유 (코드 검토)되지 않음)의 모범 사례입니다. – straya