taretmch / capacitor-auth0

Native Auth0 SDK wrapper for capacitor
https://www.npmjs.com/package/@taretmch/capacitor-auth0
MIT License
2 stars 1 forks source link

feat: Add credentials management #1

Closed taretmch closed 12 months ago

taretmch commented 12 months ago

iOS

Android

taretmch commented 12 months ago

offline_access を scope に入れると refresh_token で access_token を更新できる。

iOS

セッション保持

webAuth ログイン完了時に credentialsManager に credentials を保存する。

credentialsManager.store(credentials: credentials)

セッションの有無を取得する

isAuthenticated メソッドとして実装する。

refresh_token がオンになっている場合は、 canRenew() で良い。

credentialsManager.canRenew()

Checks that there are credentials stored, and that the credentials contain a refresh token. If you are using refresh tokens, use this method instead of hasValid(minTTL:) to check for stored credentials when your app starts up.

ref: https://auth0.github.io/Auth0.swift/documentation/auth0/credentialsmanager/canrenew()

refresh_token がオフの場合、 hasValid() が良さそう。

credentialsManager.hasValid() 

Checks that there are credentials stored, and that the access token has not expired and will not expire within the specified TTL. If you are not using refresh tokens, use this method instead of [canRenew()](https://auth0.github.io/Auth0.swift/documentation/auth0/credentialsmanager/canrenew()) to check for stored credentials when your app starts up.

ref: https://auth0.github.io/Auth0.swift/documentation/auth0/credentialsmanager/hasvalid(minttl:)

セッションの更新

credentialsManager.credentials で、リフレッシュトークンによる更新が自動的に行われる。ID Token、Access Token なども取得できる。

セッションから最新の User 情報を取得する

getUserInfo メソッドとして実装する。

credentialsManager.credentials で Access Token を取得後、Authentication API Client の userInfo に渡すことによってユーザー情報を取得できる。


Android

Android 側は2種類の Credentials Manager がある。

初期化

Auth0 インスタンス、Context と、AuthenticationAPIClient が必要

val auth0 = Auth0(this)
val apiClient = AuthenticationAPIClient(auth0)
val manager = CredentialsManager(apiClient, SharedPreferencesStorage(this))
val auth0 = Auth0(this)
val apiClient = AuthenticationAPIClient(auth0)
val manager = SecureCredentialsManager(this, apiClient, SharedPreferencesStorage(this))

セッション保持

login 時、credentials を保存

manager.saveCredentials(credentials)

セッションの有無を取得する

シンプル。

val loggedIn = manager.hasValidCredentials()

セッションの更新

getCredentials で取得するとき、refreshToken によって Access Token も自動的に更新される。

manager.getCredentials(object: Callback<Credentials, CredentialsManagerException>() {
    override fun onSuccess(credentials: Credentials) {
        // Use credentials
    }

    override fun onFailure(error: CredentialsManagerException) {
        // No credentials were previously saved or they couldn't be refreshed
    }
})

セッションから最新の User 情報を取得する

Credentials を用いて AuthenticationAPIClient から取得できる。