如何在OAuth 2.0中为移动应用程序使用隐式授权类型?

Cha*_*han 5 iphone android ios oauth-2.0

我已经阅读了有关OAuth 2.0和隐式授权类型的教程.我仍然不明白隐式授权类型如何适用于移动设备(iOS或Android).例如,如果我们创建一个SSO应用程序(如Facebook)并制作SDK来提供此服务.SSO应用程序是否以实用方式或通过Web视图与授权服务器联系?

另外一点是 - 隐式授权类型要求您发送重定向URI.我知道您可以为iOS制作自定义uri架构并执行此操作.我不明白的是授权服务器如何在设备上调用自定义URI.

kri*_*rak 6

对于移动应用中的Oauth2,您可以设置redirect_uri一些类似于dumy的URL http://localhost/redirect/,然后使用webview的"onload"事件来检查URLaccess_token

例如,在iOS上,您可以加载的WebView授权网址,并使用委托方法检查redirect_uriaccess_token是这样的:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *Url = [request URL];
    ...
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用HTML5/JavaScript在Phonegap应用中执行此操作InAppBrowser:

var loginWindow = window.open(login_url, '_blank', 'location=yes');
$(loginWindow).on('loadstart', function(e) {
    var url = e.originalEvent.url;
    var access_token = url.split("access_token=")[1];
    ...
}
Run Code Online (Sandbox Code Playgroud)

完整代码:https://github.com/krisrak/jquery-cordova-oauth2


Bad*_*ion 0

隐式授予类型不太适合移动应用程序。这是相应的 RFC (RFC 6749) 对此的说明:

隐式授权是一种简化的授权代码流,针对使用 JavaScript 等脚本语言在浏览器中实现的客户端进行了优化。

对于移动应用程序,如果您要为自己的服务制作官方应用程序,则最好使用资源所有者密码凭据流程;如果您要访问第三方 Web 服务,则最好使用授权代码流程。