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

5
我阅读了有关OAuth 2.0和隐式授权类型的教程,但我仍然不明白如何将隐式授权类型用于移动设备(iOS或Android)。例如,如果我们创建一个SSO应用程序(如Facebook)并制作一个SDK来提供此服务。SSO应用程序是通过编程方式还是通过Web视图与授权服务器联系?
另一个问题是 - 隐式授权类型要求您发送重定向URI。我知道您可以为iOS制作自定义URI模式并执行此操作。但我不明白授权服务器如何在设备上调用自定义URI。
2个回答

6

移动应用中使用Oauth2时,您可以将redirect_uri设置为一些虚拟的URL,例如http://localhost/redirect/,然后使用webview的"onload"事件检查URL以获取access_token

例如,在iOS中,您可以在webview中加载授权URL,并使用委托方法检查redirect_uri以获取access_token,如下所示:

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

您可以通过使用HTML5/JavaScript中的InAppBrowser在Phonegap应用程序中完成此操作:
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];
    ...
}

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


0

隐式授权类型不适合移动应用程序。RFC(RFC 6749)对此有如下说明:

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

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


那么关于iOS的自定义URI部分和Android的Web授权URL呢?所提到的教程还提到了在移动应用中使用隐式授权类型。 - Chan
RFC涉及整个未加密凭据,因此您在陈述隐式授权类型不适用于移动应用程序时是错误的。这不仅包括像JS这样的浏览器脚本,还包括(但不限于)直接调用的移动应用程序、直接调用的物联网等。但您是正确的,一个值得信赖的应用程序更容易通过ROPC或Auth Code(取决于应用程序是否被信任使用用户凭据)来适应。 - akoo1010
1
在移动开发和使用密码授权类型时,无法安全地存储client_secret。 - Jdruwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接