接入Google登录非常简单直观,在Enable Google Services for your App注册一个App,然后把GoogleService-Info.plist
下载下来,放到工程里面。接着设置工程的Bundle ID和URL Types。登录完成之后,Demo App会显示用户名。
接着分析一下登录流程。Google Signin会打开一个SFSafariViewController
做登录。发出去的HTTP请求如下所示。
因为是Google账号,所以https://accounts.google.com/o/oauth2/v2/auth
会重定向到https://accounts.google.com/signin/oauth
,直接在浏览器中打开该链接,长下面这样。
登录完成之后,返回App的URL如下所示。
com.googleusercontent.apps.24408797720-fi6tusi150146mfha93rh94n59ere7ab:/oauth2callback?code=4/653nbDRjmoLuloN3saMH2mw4Wf7NM01OHFHDB572hnM#
SFSafariViewController
送回来一个code,客户端拿到code之后要完成OAuth 2.0剩余的步骤。通过Charles抓包可以看到获取token的请求。
发出去的请求如下所示。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 里面解码可以发现,里面都是用户的个人信息。对比一下iat
和exp
,可以发现id_token的有效期是1493817867-1493814267=3600s
,也就是一个小时。
Demo App上面还有一个Sign out
和Disconnect
,我发现点击Sign out
没有发出任何请求,大概只是在本地把数据删除掉了。如果点击Disconnect
,那么会发出去一个revoke请求,如下图所示。
如果输入alice@secloud.xin
这个微软账号,可以看到不会马上302跳转到Google OAuth服务处理了,需要先跳到微软的登录页面完成登录。
没看到SAML token在哪里,这块需要加强理解。
image.png第三方登录完成之后,接下来就是走Google OAuth服务去拿相关的token,可以看到alice@secloud.xin
相关的信息。
网友评论