仓前iOS研究组仓前OAuth 2.0研究组iOS开发

iOS App接入Google登录实践

2017-05-03  本文已影响389人  阿呆少爷

接入Google登录非常简单直观,在Enable Google Services for your App注册一个App,然后把GoogleService-Info.plist下载下来,放到工程里面。接着设置工程的Bundle ID和URL Types。登录完成之后,Demo App会显示用户名。

image.png

接着分析一下登录流程。Google Signin会打开一个SFSafariViewController做登录。发出去的HTTP请求如下所示。

image.png

因为是Google账号,所以https://accounts.google.com/o/oauth2/v2/auth会重定向到https://accounts.google.com/signin/oauth,直接在浏览器中打开该链接,长下面这样。

image.png

登录完成之后,返回App的URL如下所示。

com.googleusercontent.apps.24408797720-fi6tusi150146mfha93rh94n59ere7ab:/oauth2callback?code=4/653nbDRjmoLuloN3saMH2mw4Wf7NM01OHFHDB572hnM#

SFSafariViewController送回来一个code,客户端拿到code之后要完成OAuth 2.0剩余的步骤。通过Charles抓包可以看到获取token的请求。

image.png

发出去的请求如下所示。Google做了一些封装,开发者并不需要自己去拼这个请求串。

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Accept: */*
User-Agent: gtm-oauth2 com.google.samples.quickstart.SignInExample/1.0.1
Content-Length: 287
Accept-Language: en-us
Accept-Encoding: gzip, deflate

client_id=24408797720-fi6tusi150146mfha93rh94n59ere7ab.apps.googleusercontent.com
&code=4%2FJ7N898ozpAyQxarnOplLX8Yv6pSk194llqNwbxwtJ6U
&grant_type=authorization_code
&redirect_uri=com.googleusercontent.apps.24408797720-fi6tusi150146mfha93rh94n59ere7ab%3A%2Foauth2callback
&verifier=70745093

Google送回来access token、refresh token和id_token,这个id_token就比较有意思了。在 https://jwt.io 里面解码可以发现,里面都是用户的个人信息。对比一下iatexp,可以发现id_token的有效期是1493817867-1493814267=3600s,也就是一个小时。

image.png

Demo App上面还有一个Sign outDisconnect,我发现点击Sign out没有发出任何请求,大概只是在本地把数据删除掉了。如果点击Disconnect,那么会发出去一个revoke请求,如下图所示。

image.png

如果输入alice@secloud.xin这个微软账号,可以看到不会马上302跳转到Google OAuth服务处理了,需要先跳到微软的登录页面完成登录。

image.png

没看到SAML token在哪里,这块需要加强理解。

image.png

第三方登录完成之后,接下来就是走Google OAuth服务去拿相关的token,可以看到alice@secloud.xin相关的信息。

image.png
上一篇下一篇

猜你喜欢

热点阅读