Upgrade to Pro — share decks privately, control downloads, hide ads and more …

«Зачем нам OAuth и тем более 2.0: как настроить авторизацию сторонних сервисов в приложении»

Redmadrobot
September 20, 2019

«Зачем нам OAuth и тем более 2.0: как настроить авторизацию сторонних сервисов в приложении»

Юля Никитина, разработчик iOS

Redmadrobot

September 20, 2019
Tweet

More Decks by Redmadrobot

Other Decks in Technology

Transcript

  1. Зачем нам OAuth и тем более 2.0 Как настроить авторизацию

    сторонних сервисов в приложении Юлия Никитина, [email protected]
  2. Что будет 1.Как появился OAuth 2.0 и чем он отличается

    от OAuth 1.0 2.Как работают access и refresh токены 3.Примеры реализации, плюсы и минусы 4.Новые способы использования в iOS 12/13 и пара слов о SignIn with Apple 2
  3. Как дать доступ другому приложению без OAuth Вариант №1. Вводить

    пароль для каждого действия в приложении
  4. Как дать доступ другому приложению без OAuth Вариант №2. Отдать

    свой пароль от сервиса стороннему приложению Вариант №1. Вводить пароль для каждого действия в приложении
  5. Как дать доступ другому приложению без OAuth Вариант №2. Отдать

    свой пароль от сервиса стороннему приложению Вариант №1. Вводить пароль для каждого действия в приложении
  6. Как появился OAuth 1.0 Blaine Cook, chief architect, Twitter "We

    want something like Flickr Auth / Google AuthSub / Yahoo! BBAuth, but published as an open standard, with common server and client libraries, etc"
  7. Как появился OAuth 2.0 Yahoo! Facebook Salesforce Microsoft Twitter Foursquare

    Deutsche Telekom Intuit Mozilla Google Eran Hammer + = https://tools.ietf.org/html/rfc6749
  8. Как появился OAuth 2.0 22 полных пересмотра спецификации "protocol" ->

    "framework" в 2012 Eran Hammer выходит из рабочей группы и просит удалить свое имя из списка авторов
  9. OAuth 1.0 vs OAuth 2.0 client consumer resource owner service

    provider user resource server нет разделения на resource server и auth server появились роли: client, auth server, resource server, resource owner protocol жесткие правила framework рекомендации к реализации
  10. Как работает OAuth 2.0 Intuit Zaim Tumblr Slack Uber Gitter

    Facebook Spotify Trello Buffer Goodreads Typetalk SoundCloud Doper NounProject Twitter Flickr Github Instagram Foursquare Fitbit Withings Linkedin Dropbox Dribbble Salesforce BitBucket GoogleDrive
  11. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  12. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  13. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token Зарегистрировать приложение у провайдера и получить client id
  14. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  15. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  16. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  17. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке 1 2 3 4 5 6 Обменять код на access token
  18. Flow OAuth 2.0 Зарегистрировать приложение у провайдера и получить client

    id Создать/получить URL для логина пользователя Открыть URL После успешного логина получить код авторизации Вернуться в приложение по redirect-ссылке Обменять код на access token URL для логина код авторизации URL для access токена
  19. Access / Refresh Access token дает доступ, который действует ограниченное

    время (например, час) Refresh token используется вместо access token'а, когда истечет его срок действия. Refresh token действует несколько месяцев
  20. OAuthSwift oauthswift = OAuth2Swift( consumerKey: "********", consumerSecret: "********", authorizeUrl: "https://api.instagram.com/oauth/authorize",

    responseType: "token" ) let handle = oauthswift.authorize( withCallbackURL: URL(string: "oauth-swift://oauth-callback/ instagram"), scope: "likes+comments", state:"INSTAGRAM") { result in switch result { case .success(let (credential, response, parameters)): print(credential.oauthToken) case .failure(let error): print(error.localizedDescription) } }
  21. ASWebAuthenticationSession - iOS 12 SFAuthenticationSession - iOS 11 func login()

    { let authUrl = makeAuthorizeUrl() webAuthSession = ASWebAuthenticationSession( url: authUrl, callbackURLScheme: Constants.callbackScheme) { [weak self] (callbackUrl, error) in guard let url = callbackUrl, error == nil else { return } let components = URLComponents(string: url.absoluteString) if let codeItem = components?.queryItems?.first(where: { $0.name == Constants.responseType}), let code = codeItem.value { self?.exchangeCodeToToken(code) } } webAuthSession?.start() } import AuthenticationServices
  22. Learn more • как работать с refresh токенами - https://auth0.com/blog/

    refresh-tokens-what-are-they-and-when-to-use-them/ • JWT Handbook от auth0.com 
 https://auth0.com/resources/ebooks/jwt-handbook • ASWebAuthenticationSession - https://dev.to/robotsquidward/ quick-guide-to-aswebauthenticationsession-api-changes-in- ios-13-4m8i • ASWebAuthenticationSession 2 - https://ajkueterman.dev/ posts/sfauthenticationsession-and- aswebauthenticationsession/