Apple Revoke Token

相信大家都知道 Apple规定,所有的APP在6月30前要支持删除账号的功能。并且开发者还收到了Apple的邮件,里面提到了Revoke Token的事情。
大致意思就是说,如果用Apple ID登录了APP,那么在删除账号的同时还需要解除Apple ID的授权,也就是Apple说的Revoke Token

image

这个API其实是需要服务器去处理的。但是这里有些东西还是需要iOS 开发人员提供的。


Revoke Tokens参数解析

i HTTP Body

  • 这是在发送请求的时候要注意的Content-Type: application/x-www-form-urlencoded
form-data
The list of input parameters required for the server to invalidate the token.
Content-Type: application/x-www-form-urlencoded

ii client_id

  • 这个参数传Bundle Identifier就可以了

iii client_secret

  • 这个参数的获取就要复杂一些

  • Apple developer里面按下面的步骤生成一个p8文件

    • 1、进入 Certificates, Identifiers & Profiles > Keys,然后单击 Keys 旁边左上角的 + 号。
    • 2、提供密钥名称并确保勾选 Sign In with Apple。在这里,我们还必须单击 Configure。在接下来出现的 Configure Key 面板中,选择我们之前在 Choose a Primary App ID 下使用的 App ID,然后单击保存
    • 3、单击 Continue,然后在下一页中验证详细信息并单击 Register
    • 4、下载密钥并将其保存在安全的地方,因为您永远无法再次下载密钥。下载密钥后单击 Done
  • 接下来,通过Ruby 和 刚刚下载的p8文件,生成我们所需要的client_secret

    • 1、设置 Ruby 后运行命令 sudo gem install jwt 来设置 ruby-jwt

    • 2、通过文件编辑生成secret_gen.rb文件:

      require "jwt"
      key_file = "Path to the private key"
      team_id = "Your Team ID"
      client_id = "The Service ID of the service you created"
      key_id = "The Key ID of the private key"
      validity_period = 180 # In days. Max 180 (6 months) according to Apple docs.
      
      private_key = OpenSSL::PKey::EC.new IO.read key_file
      
      token = JWT.encode(
         {
            iss: team_id,
            iat: Time.now.to_i,
            exp: Time.now.to_i + 86400 * validity_period,
            aud: "https://appleid.apple.com",
            sub: client_id
         },
         private_key,
         "ES256",
         header_fields=
         {
            kid: key_id 
         }
      )
      puts token
      
      
    • 3、运行刚刚生成的rb文件:ruby secret_gen.rb,获取client_secret

iv token

  • 这个参数是通过另一个API接口去获取的:Generate and Validate Tokens

    image
  • 这个接口有些是我们已经获取的,eg:client_id & client_secret;这里只讲一下codegrant_type

    • code:这个是我们获取Apple授权的时候得到的,每次登录都会有。对应的是:authorizationCode
    • grant_type:这里就选authorization_code
  • 这样请求Generate and Validate Tokens之后,就会得到我们所需要的access_token,也就是token参数。

v token_type_hint

  • 这个就不用多说了,传access_token就好了。

对于iOS开发者来说,这些都不要在APP端操作,但是authorizationCode是一定要在认证的时候去获取,并传递给服务器的。


当请求完毕,返回200之后,我们再次使用A

@作者:Jax_YD 链接:https://www.jianshu.com/p/8061d924b2b6


在我调试的过程中,记录一下后端的逻辑,以PHP为例

1. 获取client_secret

        $clientId = 'com.testt.relaxme'; // APP的BUNDLE_ID
        $authCode = ' APP登录成功后获得的authorizationCode'; 
        $teamId = 'Team ID'; // Team ID
        $keyId = 'Key ID'; // Key ID
        $privateKeyFilePath = "pem格式私钥文件的路径"; 【可以转换为pem的私钥】
        // 使用私钥来生成client_secret
        $privateKey = openssl_pkey_get_private("file://$privateKeyFilePath");
        if (!$privateKey) {
            exit("Get private key failed");
        }
        $payload = [
            'iss' => $teamId,
            'iat' => time(),
            'exp' => time() + 86400,
            'aud' => 'https://appleid.apple.com',
            'sub' => $clientId,
        ];
        $clientSecret = JWT::encode($payload, $privateKey, 'ES256', $keyId);

2.调用苹果接口验证authorizationCode

        $postParams = [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'code' => $authCode,
            'grant_type' => 'authorization_code',
        ];

        $ch = curl_init();
        curl_setopt_array($ch, [
            CURLOPT_URL => 'https://appleid.apple.com/auth/token',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HEADER => false,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => http_build_query($postParams),
        ]);
        $response = curl_exec($ch);

        #可参考以下结果
        {
            "access_token": "一个token,此处省略",
            "token_type": "Bearer",
            "expires_in": 3600,
            "refresh_token": "一个token,此处省略",
            "id_token": "结果是JWT,字符串形式,此处省略"
        }

        //示例:
        {
          "access_token": "ac6dd62539f5441cdacd7b548a9fe33a9.0.nrszq.gCD9GEmcznYjt5m3h4UkEg",
          "token_type": "Bearer",
          "expires_in": 3600,
          "refresh_token": "r9f10xxxxxxxxxxxe80e.0.nxxxxq.fk7Q1ZxxxxxxxxxM0w",
          "id_token": "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnpvZnVuZC5xaWFuZ3VuZ3VuIiwiZXhwIjoxNTgzMTMxNzI1LCJpYXQiOjE1ODMxMzExMjUsInN1YiI6IjAwMTI5MC44MDYzZGRmODMwYjI0YTQ5OTc4OTZhNmUxOGNmMjE5Yi4xMDEzIiwiYXRfaGFzaCI6IjBrU05fMzlkcGxhUEdnMUd0YV9Ka1EiLCJlbWFpbCI6InJlZXM5cGd3NWJAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODMxMzEwOTV9.p19sc-tjsNQNCXyb33AX9r4oXj1xA4EmKh9Yp5E5ImxnOe6n_ISqvgMyDGqOuZwLAP9iMfB4-S_--1dpuzPx4HtwOyygpHhZSEZ4GcynCpHg6MFC7Mlkcn34J_awEXPeox_nJMRPRMN-ydQ7GxLvSrEJPJ-1rL473pIBc-DyNdYjkXcuyVU4FN6nEuh2NrOKCzMjkeEDqSmL2nG_TM7qE7JscAOcI6Nv5oml2KkYMeQl24kopQa2rC3m8HSsYSdaPs04pdiFEF20Fl3RqR-cnE0UeTmlC4KaBRF4xGpPpNT-OKvW2P6yUrkHmS27Mt1vM1sJkCiKMUGO3_i0Ef7ghA"
}

3.开始Revoke tokens 传送门

curl -v POST "https://appleid.apple.com/auth/revoke" \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'client_id=CLIENT_ID' \
-d 'client_secret=CLIENT_SECRET' \
-d 'token=ACCESS_TOKEN' \
-d 'token_type_hint=access_token'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容