[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rest-api-chto-takoe-oauth-2-0-i-kak-on-rabotaet":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1126,"chto-takoe-oauth-2-0-i-kak-on-rabotaet",34,"rest-api","REST API","🌐","Что такое OAuth 2.0 и как он работает?","OAuth 2.0 — протокол (фреймворк) авторизации, который позволяет стороннему приложению получить ограниченный доступ к HTTP-сервису от имени владельца ресурса, не раскрывая его учётные данные.\n\n> **Аналогия из жизни:** OAuth 2.0 — как выдача ключ-карты горничной в отеле. Вы (Resource Owner) не даёте горничной свой паспорт (пароль), а ресепшн (Authorization Server) выдаёт ей карту с ограниченным доступом (токен): только в вашу комнату и только до определённого времени.\n\n### Основные роли\n\n| Роль | Описание |\n|------|----------|\n| Resource Owner | Пользователь, владелец данных |\n| Client | Приложение, запрашивающее доступ |\n| Authorization Server | Сервер, выдающий токены (Keycloak, Auth0 и др.) |\n| Resource Server | Сервер, хранящий защищённые ресурсы (наш API) |\n\n### Основные потоки (Grant Types)\n\n1. **Authorization Code** — наиболее безопасный, для серверных приложений:\n```\n1. Клиент → Redirect на Authorization Server\n2. Пользователь аутентифицируется и даёт согласие\n3. Authorization Server → Redirect на клиент с authorization code\n4. Клиент → Authorization Server: обмен code на access_token\n5. Клиент → Resource Server: запрос с access_token\n```\n\n2. **Authorization Code + PKCE** — для SPA и мобильных приложений (рекомендуемый). Дополняет Authorization Code проверкой code_verifier \u002F code_challenge для защиты от перехвата authorization code.\n\n3. **Client Credentials** — для межсервисного взаимодействия (machine-to-machine):\n```\nPOST \u002Foauth\u002Ftoken\ngrant_type=client_credentials&client_id=myapp&client_secret=secret&scope=read\n```\n\n4. **Resource Owner Password Credentials** — устаревший, не рекомендуется.\n\n\u003Cdetails>\u003Csummary>Настройка Spring Boot как Resource Server\u003C\u002Fsummary>\n\n```java\n@Configuration\n@EnableWebSecurity\npublic class ResourceServerConfig {\n\n    @Bean\n    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {\n        return http\n            .authorizeHttpRequests(auth -> auth\n                .requestMatchers(\"\u002Fapi\u002Fpublic\u002F**\").permitAll()\n                .anyRequest().authenticated())\n            .oauth2ResourceServer(oauth2 -> oauth2\n                .jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthConverter())))\n            .build();\n    }\n\n    @Bean\n    public JwtAuthenticationConverter jwtAuthConverter() {\n        JwtGrantedAuthoritiesConverter converter = new JwtGrantedAuthoritiesConverter();\n        converter.setAuthorityPrefix(\"ROLE_\");\n        converter.setAuthoritiesClaimName(\"roles\");\n\n        JwtAuthenticationConverter jwtConverter = new JwtAuthenticationConverter();\n        jwtConverter.setJwtGrantedAuthoritiesConverter(converter);\n        return jwtConverter;\n    }\n}\n```\n\nВ `application.yml`:\n```yaml\nspring:\n  security:\n    oauth2:\n      resourceserver:\n        jwt:\n          issuer-uri: https:\u002F\u002Fauth-server.example.com\u002Frealms\u002Fmyrealm\n```\n\n\u003C\u002Fdetails>\n\n> **На собеседовании:** нужно назвать четыре роли и три основных потока (Authorization Code, PKCE, Client Credentials). Частая ошибка — путать аутентификацию и авторизацию: OAuth 2.0 — это протокол авторизации, а не аутентификации (для аутентификации — OpenID Connect поверх OAuth 2.0).","","middle",[15],"rest",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое OAuth 2.0 и как он работает? — Gymterview","OAuth 2.0 — протокол (фреймворк) авторизации, который позволяет стороннему приложению получить ограниченный доступ к HTTP-сервису от имени владельца ресурса, не","OAuth 2.0 — протокол (фреймворк) авторизации, который позволяет стороннему приложению получить ограниченный доступ к HTT",[15,13],"OAuth 2.0 — протокол (фреймворк) авторизации, который позволяет стороннему приложению получить ограниченный доступ к HTTP-сервису от имени владельца ресурса, не раскрывая его учётные данные.",true]