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

标签 android ios iphone oauth-2.0

我读过 tutorial关于 OAuth 2.0 和隐式授权类型。我仍然不明白隐式授权类型如何适用于移动设备(iOS 或 Android)。例如,如果我们创建一个 SSO 应用程序(如 Facebook)并制作一个 SDK 来提供此服务。 SSO 应用程序是通过实用方式还是通过 Web View 联系授权服务器?

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

最佳答案

对于移动应用程序中的 Oauth2,您可以将 redirect_uri 设置为一些虚拟 URL,例如 http://localhost/redirect/,然后使用 webview 的“onload”事件来检查 access_token

的 URL

例如在 iOS 中,您可以在 webview 中加载授权 url,并使用委托(delegate)方法检查 redirect_uri 是否有 access_token,如下所示:

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

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

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

关于android - 如何在 OAuth 2.0 中为移动应用程序使用隐式授权类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332065/

相关文章:

java - Android Maven 插件执行测试时运行时异常

java - 无法从 fragment 按钮启动 Activity

android - Gradle,您尚未接受许可协议(protocol)(Android SDK)

iphone - 在 iPhone 项目中加载数据文件

ios - 如何为 ipad 显示全屏 ipad

ios - Watchkit 应用程序仅在 iPad 上无法启动

Android GridLayout 水平居中

ios - 无论是否在托管上下文 iOS 上调用保存,Core Data 中的实体是否会保留其状态?

ios - Xcode 5 SpriteKit 粒子发射器未出现在编辑器中

objective-c - 等待 NSURLConnection