[RUBY] Melden Sie sich bei Apple mit gem's apple_id in Rails an und zwischenspeichern Sie Apples JWK

Wenn Sie sich in einer Rails-App bei Apple anmelden möchten, müssen Sie id_token in Rails überprüfen, da die Anmeldung bei Apple schließlich OpenID Connect ist. Wenn es sich um Ruby handelt, kann die Überprüfung mithilfe dieses Edelsteins https://github.com/nov/apple_id problemlos durchgeführt werden.

Überprüfen Sie id_token mit apple_id

id_token = AppleID::IdToken.decode(id_token)
id_token.verify!(code: code)

Sie können id_token wie folgt überprüfen. Bei der Methode verify! Wird jedoch der von Apple von HTTPS bereitgestellte öffentliche Schlüssel (JWK) abgerufen und mit diesem JWK die Signatur überprüft. tun. Standardmäßig kommuniziert es bei jeder Überprüfung über HTTPS mit Apple. Da dieser öffentliche Schlüssel jedoch selten aktualisiert wird, kann er zwischengespeichert werden, und es ist wünschenswert, ihn auch als Serverimplementierung zwischenzuspeichern.

1.0.0 von gem's apple_id wurde kürzlich veröffentlicht und mit diesem Versions-Upgrade kann JWK überall zwischengespeichert werden. In diesem Artikel werde ich Ihnen zeigen, wie Sie es zwischenspeichern.

Caching-Methode

Die Methode zum Zwischenspeichern ist sehr einfach. Legen Sie einfach die Klasse fest, die die Abrufmethode implementiert, die nur ein Argument in AppleID :: JWKS.cache akzeptiert. Sie können JWK erhalten, indem Sie Yield in der Fetch-Methode aufrufen. Wenn Sie es beispielsweise in einem Prozess zwischenspeichern möchten, schreiben Sie den folgenden Code.

class ProcessCache
  def initialize
    @cache = {}
  end

  def fetch(cache_key)
    @cache[cache_key] ||= yield
  end
end

AppleID::JWKS.cache = ProcessCache.new

AppleID :: JWKS.cache ist als Klassenvariable definiert. Als Implementierung der Cache-Klasse können Sie sie einer Instanzvariablen zuweisen und sie wird dabei zwischengespeichert. Selbst wenn Sie es in einer Datei, einem Cache-Server, einer Datenbank usw. anstelle eines Prozesses speichern möchten, können Sie es ersetzen, indem Sie die Abrufmethode auf dieselbe Weise implementieren, was praktisch ist. Die Cache-Klasse sollte unter app oder lib implementiert werden, config / initializers / apple_id.rb usw. vorbereiten und dort AppleID :: JWKS.cache zuweisen.

Recommended Posts

Melden Sie sich bei Apple mit gem's apple_id in Rails an und zwischenspeichern Sie Apples JWK
Japanisieren Sie mit i18n mit Rails
Implementieren Sie die Anmeldefunktion in Rails einfach mit Name und Passwort (3).
[Ruby on Rails] So melden Sie sich nur mit Ihrem Namen und Passwort mit dem Gem-Gerät an