Si vous souhaitez vous connecter avec Apple dans une application Rails, vous devez vérifier id_token dans Rails car Se connecter avec Apple est, après tout, OpenID Connect. S'il s'agit de Ruby, la vérification peut être effectuée facilement en utilisant ce gem https://github.com/nov/apple_id.
id_token = AppleID::IdToken.decode(id_token)
id_token.verify!(code: code)
Vous pouvez vérifier id_token comme ceci, mais ce qui est fait dans la méthode verify! Est d'obtenir la clé publique (JWK) fournie par Apple par HTTPS et d'utiliser ce JWK pour vérifier la signature. Faire. Par défaut, elle communique avec Apple via HTTPS à chaque fois qu'elle est vérifiée, mais comme cette clé publique est rarement mise à jour, elle peut être mise en cache, et il est également souhaitable de la mettre en cache en tant qu'implémentation de serveur.
La version 1.0.0 de apple_id de gem a été récemment publiée, et avec cette mise à niveau de version, JWK peut être mis en cache n'importe où. Dans cet article, je vais vous montrer comment le mettre en cache.
La méthode de mise en cache est très simple, il suffit de définir la classe qui implémente la méthode fetch qui ne prend qu'un seul argument dans AppleID :: JWKS.cache. Vous pouvez obtenir JWK en appelant yield dans la méthode fetch. Par exemple, si vous souhaitez le mettre en cache dans un processus, écrivez le code suivant.
class ProcessCache
def initialize
@cache = {}
end
def fetch(cache_key)
@cache[cache_key] ||= yield
end
end
AppleID::JWKS.cache = ProcessCache.new
AppleID :: JWKS.cache est défini comme une variable de classe, donc en tant qu'implémentation de la classe Cache, vous pouvez l'affecter à une variable d'instance et elle sera mise en cache dans le processus. Même si vous souhaitez l'enregistrer dans un fichier, un serveur de cache, une base de données, etc. au lieu d'un processus, vous pouvez le remplacer en implémentant la méthode fetch de la même manière, ce qui est pratique. La classe Cache doit être implémentée sous app ou lib, préparez config / initializers / apple_id.rb, etc., et affectez-y AppleID :: JWKS.cache.
Recommended Posts