ウェブサービスにOAuth2プロバイダーの機能を実装し、ネイティブアプリのAPI使用認可にOAuth2を利用したい。

`ResourceOwnerPasswordcredentialsフロー`を使って`access_token`を発行することが可能ですが、
このウェブサービスではFacebookやTwitterのアカウントを使った登録が可能であり、 ID/PWを所持していないユーザが存在します。
`Implicitフロー`では`refresh_token`の発行が出来ないため、利用しづらいと考えています。

この場合、`AuthorizationCodeフロー`を使った方法で`access_token`を得るのが正しいのでしょうか？
ネイティブアプリではSafariやChromeを経由してしまうと、UXを著しく損なうため、より良い方法があれば教えてください。
CC BY-SA 3.0
2014-12-17T10:23:41.493
1912
2014-12-21T12:57:12.267
2014-12-17T15:48:07.087
1024
4628
question
facebook oauth
OAuth2のプロバイダーとして外部サービス経由で登録されたユーザに、トークンを発行するには
私はOAuthプロバイダを実装したことがないので客観的な意見になりますが、ResourceOwnerPasswordcredentialsフロー、AuthorizationCodeフローの併用(各ユーザーに適した方を利用)という形になるのでしょうか……

一般的に認可画面を開くのに『外部ブラウザで開く』『webviewを利用する』といった方法が取られ後者ではUX的にはある程度ましにはなるかと思いますがもちろんユーザーに『パスワードを盗られるのではないか』と疑惑、恐怖を抱かせかねません。

(対象デバイスをiOSまたはAndroidと仮定すると、)Twitter、Facebook共にSDKが用意されてい公式アプリや端末の認証で各々にログインできOAuth
echoも使えたり(Twitterの場合)するのでそれを利用するのも手かと思います。(残念ながら私はFacebookのAPIは経験がありません。)
CC BY-SA 3.0
2014-12-17T13:09:35.853
1925
2014-12-17T13:09:35.853
2376
1912
answer
Facebookに関していえば、[Platform Policy](https://developers.facebook.com/policy/) の
7.Login の第2項に、

> Native iOS and Android apps that implement Facebook Login must use our
> official SDKs for login.

と、Facebook Login(アクセストークンの取得)にオフィシャルSDKの利用が義務づけられています。そして、SDK
を使う場合は端末にFacebookアプリがインストールされていれば、Facebook アプリとのFast App
Switchによってアクセストークンを取得できます(アプリが内場合はSafari/WebViewなどの他の手段にフォールバックします)。
CC BY-SA 3.0
2014-12-21T12:57:12.267
2328
2014-12-21T12:57:12.267
2407
1912
answer