Mam zainstalowaną aplikację na iOS i backend napisany wiosną z mechanizmem OAuth2.AppAuth iOS. Jak zapisać informacje o tokenie, gdy użytkownik zarejestruje konto na moim własnym serwerze OAuth2
Mam punkt końcowy signup
w moim zapleczu, który akceptuje niektóre dane użytkownika i zwraca odpowiedź OAuth2, np.
{
"access_token":"9154140d-b621-4391-9fdd-fbba9e5e4188",
"token_type":"bearer",
"refresh_token":"dd612036-7cc6-4858-a30f-c548fc2a823c",
"expires_in":89,
"scope":"write"
}
Po tym chcę zapisać OIDAuthState
w moim pęku kluczy, więc należy wykonać następujące czynności:
func saveTokenResponse(responseDict: [String: NSCopying & NSObjectProtocol]) {
let redirectURI = URL(string: kRedirectURI)
let configuration = OIDServiceConfiguration(authorizationEndpoint: URL(string: kAuthorizationEndpoint)!, tokenEndpoint: URL(string: kTokenEndpoint)!)
let request = OIDAuthorizationRequest(configuration: configuration, clientId: self.kClientID, scopes: ["write"], redirectURL: redirectURI!, responseType: OIDResponseTypeCode, additionalParameters: nil)
let accessToken = responseDict["access_token"] ?? nil
let tokenType = responseDict["token_type"] ?? nil
let refreshToken = responseDict["refresh_token"] ?? nil
let expiresIn = responseDict["expires_in"] ?? nil
let scope = responseDict["scope"] ?? nil
let response = OIDAuthorizationResponse(request: request, parameters: [
"access_token": accessToken!,
"token_type": tokenType!,
"refresh_token": refreshToken!,
"expires_in": expiresIn!,
"scope": scope!
]
)
let authState = OIDAuthState(authorizationResponse: response) //here authState.refreshToken is nil, so it won't be serialized.
updateAuthState(authState: authState) // it just saves it in keychain
}
Wszystko działa dobrze, ale mam problem, kiedy wygasa token. Aplikacja umożliwia wywołanie backend i AppAuth nie jest w stanie odświeżyć znak:
widzę, że token odświeżania nie jest obecny w obiekcie OIDAuthState
. Sprawdziłem inicjowanie OIDAuthState
od OIDAuthorizationResponse
i okazało się, że token nie jest przypisany w tym przypadku.
Czy ktoś może pomóc, w jaki sposób mogę zapisać OIDAuthState
z odpowiedzi OAuth otrzymanej od mojego zaplecza? Czy robię coś w niewłaściwy sposób?
Dzięki,
Osman
W jaki sposób przygotowujesz pierwotne żądanie autoryzacji? Czy używasz do tego AppAuth? –
@TomHarrington Nie, nie składam żadnego wstępnego żądania autoryzacji, ponieważ jest to punkt końcowy "Zarejestruj się", który powinien zostać wywołany bez żadnej autoryzacji. W przeciwnym razie może mi brakować czegoś. – fiks
Jak uzyskać początkowy token, który chcesz odświeżyć? –