ラインの新しいバージョンから2019年10月号9午後三大尊敬かわいいプロダクトマネージャーの時間とどのような特別なニーズに加えて、新しいIOSの終わりは、Appleアカウントでサインインがあります
IOSは本当に世界で最もゴミ言語、誰も、Appleは世界のゴミ会社であり、誰であります
背景を確認する方法のほとんど言及にAppleの公式ドキュメントに関するアップルでサイン、わずか数絵を描く、クライアントがバックグラウンドにいくつかのパラメータを渡し、成功した認証サーバにこれらのパラメータを使用する背景には、右、IOS OKが簡単に聞こえる要求します
どのようにMMP 1.受信指定されたパラメータの解析?
パラメータIOSサーバを渡す方法2. MMP?
MMP 3.どのようなリターン正常に解決しても?
ないと、少なくともデモああ、言及しません。
まだ行かなければならなかったオンラインリソースの検索、そして最終的に見つける https://blog.csdn.net/wpf199402076118/article/details/99677412を
ブログ、大まかに言えば、2つの認証方式:
あなたは2つの方法が呼び出す方法ブロガーはまた、コードを掲載検証1.JWTが、あなたはどこにも実行されていないコードは、私は、コード全体やゴーストを貼り付けていなかったのか分からないことがわかります、私は知りません
2.認証コードフィールドを確認してお届けすることができませんでしたあなたがフロントデスクを取得するかわからない多くのことを必要とします
問題がまだ存在する場合に、多くのテストと狂気の多くの時間の後、最終的に以下のゴミのコードで、私はいつも感じて、問題は、コードのステッカーを言うようになりました
パブリック 静的文字列(文字列JWT、文字列の聴衆、文字列対象が)確認スロー{例外を 文字列strkey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlxrwmuYSAsTfn + lUu4goZSXBD9ackM9OJuwUVQHmbZo6GW4Fu / auUdN5zI7Y1dEDfgt7m7QXWbHuMD01HLnD4eRtY + RNwCWdjNfEaY / esUPY3OVMrNDI15Ns13xspWS3q + 13kdGv9jHI28P87RvMpjz / JCpQ5IM44oSyRnYtVJO + 320SB8E2Bw92pmrenbp67KRUzTEVfGU4 + obP5RZ09OxvCr1io4KJvEOjDJuuoClF66AT72WymtoMdwzUmhINjR0XSqK6H0MdWsjw7ysyd / JhmqX5CAaT9Pgi0J8lU / pcl215oANqjy7Ob + VMhug9eGyxAWVfu / 1u6QJKePlE + wIDAQAB" 。 PublicKey公開 = getPublicKey(strkey)。 JwtParser jwtParser = Jwts.parser()setSigningKey(公開鍵)。 jwtParser.requireIssuer("https://appleid.apple.com" ); jwtParser.requireAudience(観客)。 jwtParser.requireSubject(被写体) 試す{ JWS <請求>請求= jwtParser.parseClaimsJws(JWT)。 もし(!請求= ヌル。&& claim.getBody()のcontainsKey( "AUTH_TIME" )){ 戻り "成功" 。 } 戻り「FIALD」。 } キャッチ(ExpiredJwtException電子){ log.error( "りんごidentityTokenが満了" 、E)。 リターン「FIALD」キャッチ(例外e){ log.error( "りんごidentityTokenは違法" 、E)。 リターン「FIALD」。 } } / ** *文字列转公钥のPublicKey * @paramのキー * @return * @throws 例外 * / パブリック 静的のPublicKey getPublicKey(文字列キー)がスロー例外{ バイト[] keyBytesします。 keyBytes =(新しいBASE64Decoder())decodeBuffer(キー)。 X509EncodedKeySpec keySpec =新しいX509EncodedKeySpec(keyBytes)。 KeyFactoryにするKeyFactory = KeyFactory.getInstance( "RSA" )。 PublicKey公開 = keyFactory.generatePublic(keySpec)。 返すPUBLICKEYを。 }
下では、どのように検証言います
Appleの不正アクセスを呼び出します1.IOSクライアントは、アップルという一連の動作が成功した後、検証JWTのフォーマット文字列identityToken、メールなどから固有のuserIdとして、いくつかの非常に基本的な情報を取得します
成功した検証2.クライアントの認証後インターフェースを確認するためにコールバック
JWT、JWT書式文字列を解析する文字列3.背景は「」「全体情報は、3つの部分に分割され、最初の部分は、人を承認第2検証情報の一部ことは、ヘッダ符号化フォーマットと秘密鍵IDを含みます効果的な時間ああ第三部が暗号化してからの事の12の部分まで追加されて、私は知らない今まで、この、私の決意の第三の部分を知って取得していない人
ヘッダ及び前記(パートII)JWT 4を復号する必要が使用されるのBase64を使用して符号化されます
解析された第一の部分
{ "子供" "AIDOPK1" 、 "ALG": "RS256" }
解析された第二の部分
{ "ISS": "https://appleid.apple.com" 、 "AUD": "**********" 、 "EXP":1570617356 、 "IAT":1570616756 、 "サブ": "00 ***** 1790047f40335c6c1a.0641" 、 "c_hash": "eqOdpr _ ** TyHiRymHbPQ" 、 "AUTH_TIME":1570616756 }
第二の部分は有効な情報AUDを取得するために復号化されてもよいし、二つのサブ双方は、検証を使用する必要が
6.インタフェースは、もともとアップルが提供するキーからキーの方法を得ることを確認し、取得したが、形式は、次のものを得ることです
{ "キー" :[ { "KTY": "RSA" 、 "子供" "AIDOPK1" 、 "使用": "SIG" 、 "ALG": "RS256" 、 "N":「lxrwmuYSAsTfn-lUu4goZSXBD9ackM9OJuwUVQHmbZo6GW4Fu_auUdN5zI7Y1dEDfgt7m7QXWbHuMD01HLnD4eRtY-RNwCWdjNfEaY_esUPY3OVMrNDI15Ns13xspWS3q- 13kdGv9jHI28P87RvMpjz_JCpQ5IM44oSyRnYtVJO-320SB8E2Bw92pmrenbp67KRUzTEVfGU4-obP5RZ09OxvCr1io4KJvEOjDJuuoClF66AT72WymtoMdwzUmhINjR0XSqK6H0MdWsjw7ysyd_JhmqX5CAaT9Pgi0J8lU_pcl215oANqjy7Ob-VMhug9eGyxAWVfu_1u6QJKePlE-W」、 "E": "AQAB" } ] }
どのようにこの事を使用するには?文字列の方法が何であるかを介して行われ、私は具体的な説明を見つけることしたくなかったが、オンラインサイトでは、私は見つけられませんでしたJavaコードを変換する方法についてのPublicKeyであるこの事を変換することができ、また通知を取得する学生を探した後、オンラインでの変換を見てそれはのPublicKeyに変換することができます
パブリック 静的のPublicKey getPublicKey(文字列キー)がスロー例外{ バイト[] keyBytesします。 keyBytes =(新しいBASE64Decoder())decodeBuffer(キー)。 X509EncodedKeySpec keySpec = 新しいX509EncodedKeySpec(keyBytes)。 KeyFactoryにするKeyFactory = KeyFactory.getInstance( "RSA" )。 PublicKey公開 = keyFactory.generatePublic(keySpec)。 返すPUBLICKEYを。 }
7.検証認証文字列は、5分の有効時間です
彼は加えました:
文字列JWT = thirdLoginReq.getIdentityToken()。 列デコード = Base64.decoded(jwt.split( "\\。")[1 ])。 ストリングストリング = decode.substring(0、decode.indexOf( "}")+ 1 )。 JSONObject jsonObject = JSON.parseObject(サブストリング)。 列サブ = jsonObject.getString(「サブ」)。 文字列AUD = jsonObject.getString( "AUD")。
jarファイルを使用するには
<依存> <groupIdを> io.jsonwebtoken </ groupIdを> <たartifactId> jjwt </たartifactId> <バージョン> 0.7.0 </バージョン> </依存関係>