У меня есть приложение iOS и бэкэнд, написанный в Spring с реализованным механизмом OAuth2.
У меня есть конечная точка signup
в моем бэкэнд, которая принимает некоторые пользовательские данные и возвращает ответ OAuth2, например.
{
"access_token":"9154140d-b621-4391-9fdd-fbba9e5e4188",
"token_type":"bearer",
"refresh_token":"dd612036-7cc6-4858-a30f-c548fc2a823c",
"expires_in":89,
"scope":"write"
}
После этого я хочу сохранить OIDAuthState
в моей цепочке ключей, поэтому я делаю следующее:
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
}
Все работает хорошо, но у меня проблема, когда токен истекает. Приложение делает звонок на бэкэнд, и AppAuth не может обновить токен:
Я вижу, что токен обновления отсутствует в объекте OIDAuthState
. Я проверил инициализацию OIDAuthState
из OIDAuthorizationResponse
и выяснил, что в этом случае токен не назначен.
Может ли кто-нибудь помочь, как я могу сохранить OIDAuthState
из ответа OAuth, который я получаю от моего бэкэнда? Или я делаю что-то не так?
Спасибо,
Осман