OAuth 2.0-это лицензионное соглашение промышленного уровня. OAuth 2.0 унаследован от OAuth 1.0, который был создан в 2006 году. OAuth 2.0 стремится помочь разработчикам упростить авторизацию и предоставить конкретные процессы авторизации для веб -приложений, настольных приложений, мобильных приложений и встроенных приложений.
OAuth 2.0-это стандартный протокол отрасли для разрешения. OAuth 2.0 заменяет работу, выполненную по оригинальному протоколу OAuth, созданного в 2006 году. OAuth 2.0 фокусируется на простоте разработчика клиента, одновременно предоставляя конкретные потоки авторизации для веб -приложений, настольных приложений, мобильных телефонов и устройств гостиной.
Четыре персонажа OAuth 2.0
Для легкого понимания, возьмите широко используемый логин WeChat в качестве примера
Владелец ресурса
Владелец ресурса, личная информация, установленная на WeChat, каждым пользователем, соответствующим WeChat, принадлежит каждому пользователю и не принадлежит Tencent.
Сервер ресурсов
Серверы ресурсов, как правило, представляют собой API REST для некоторых операций пользовательских данных (добавление, удаление, модификация и поиск), такие как интерфейс WeChat для получения базовой информации пользователя.
Клиентское приложение
Сторонние клиенты, по сравнению с приложениями, разработанными различными общественными учетными записями WeChat, сторонние приложения могут получить доступ к API REST на сервере ресурсов после авторизованы сервером аутентификации для получения базовой информации, такой как аватар пользователя, пол, регион и т. Д.
Сервер авторизации
Аутикация сервера, чтобы проверить, является ли сторонний клиент законным. Если это законно, выпустите токен для клиента, а третья сторона использует токен для вызова API сервера ресурсов.
Четыре метода авторизации (тип гранта)
Anthorization_code
Тип кода авторизации, применимый к приложению веб -сервера. Режим: клиент первые вызовы/OAuth/Authorize/для ввода интерфейса авторизации пользователя и возвращает код после авторизации пользователя, а затем клиент получает токен доступа в соответствии с кодом и AppSecret.
ITICE упрощает тип , и существует меньше шагов для получения кода авторизации, чем тип кода авторизации. После того, как клиентское приложение будет авторизовано, сервер аутентификации напрямую разместит токен доступа в URL -адрес клиента. Клиент анализирует URL, чтобы получить токен. Этот метод на самом деле не очень безопасен, и вы можете использовать HTTPS безопасных каналов и сократить время достоверности токенов доступа, чтобы снизить риск.
пароль
Тип пароля, клиентское приложение получает токен доступа через имя пользователя и пароль. Он подходит для серверов ресурсов, серверы аутентификации и клиенты имеют полные отношения доверия, потому что пользователь хочет отправить имя пользователя и пароль пользователю непосредственно в клиентское приложение. Клиентское приложение получает токен через имя пользователя и пароль, отправленные пользователем, а затем обращается к ресурсам сервера ресурсов. Например, Alipay может войти непосредственно с именем пользователя Taobao и паролем, потому что они принадлежат к одной и той же компании, и они полностью доверяют друг другу.
client_credentials
Тип клиента - это способ, который не требует участия пользователей и используется для стыковки между различными службами. Например, приложение, которое вы разрабатываете, должно позвонить в службу поставщика услуг SMS -проверки кода, позвонить в службу поставщика услуг карты и позвонить в службу поставщика услуг мобильного телефона Push Push Service. Когда вам нужно позвонить в службу, вы можете напрямую использовать идентификатор приложения и приложение, предоставленное поставщиком услуг для получения токена. После того, как вы получите токен, вы можете напрямую позвонить в службу.
Другие понятия
выполнить
Иногда сервер ресурсов и сервер аутентификации являются двумя разными приложениями. Иногда сервер ресурсов и сервер аутентификации находятся в одном приложении. Разница в том, должен ли сервер ресурсов проверить обоснованность токена. Первый должен проверить, а последний - нет. Последний реализован здесь.
Конфигурация безопасности приложения
@ConfigurationPublic Class SecurityConfiguration Extends WebseCurityConfigurerAdapter {@Override Protected void Configure (httpsecurity http) Throws Exception {http.formlogin (). И (). Csrf (). Disable () .authorizeRequests (). (). } @Override public void configure (Websecurity Web) бросает исключение {super.configure (web); } @Override Protected void configure (AuthenticationManagerBuilder Auth) Throws Exception {auth.InmemoryAuthentication (). WithUser ("lyt"). Пароль ("lyt"). Власти ("role_user"). } @Bean @Override public authentication manage outentication managerbean () throws exception {return super.authentication managerbean (); }}Конфигурация сервера аутентификации
@EnyableAuthorizationserver @configurationPublic Class AuturizationserverConfiguration расширяет AuthorizationServerConfigurerAdapter {@Override public void configure (ClientDetailsServiceConfigurer клиенты). .AuthorizedGrantTypes («Authorization_Code», «Пароль», «ITMICE», «Client_credentials»);} @Override public void configure (AuthorizationServerSecurityConfigurer Security) THRES Exception {Super.Configure (Security); } @Override public void configure (AuthorizationServerEndPointSconfigurer Endpoints) Throws Exception {endpoints.AuthenticationManager (AuthenticationManager); } @Autowired @qualifier ("AuthenticationManagerBean") Private AuthenticationManager AuthenticationManager;}Конфигурация сервера ресурсов
@Enableglobalmethodsecurity (prefostenabled = true)@enablerSourceserver@configurationPublic ClasserCerverConfiguration Extrends resourceServerConfigurerAdapter {@Override public void configure (httpsecurity http) exception {http.antmatcher (oauther/**** .antmatchers (httpmethod.get, "/read/**").access("#oauth2.hasscope('read ')") .antmatchers (httpmethod.post, "/write/**").access("#oauth2.hasscope('write')") ")") ")") "); }}Настройки порядок фильтра ресурсов
Вам необходимо установить ордер на фильтр на 3 в Application.yml. Пожалуйста, обратитесь к ссылке по конкретным причинам.
Предотвратить конфликты печенья
Чтобы избежать ошибок между файлами cookie на сервере аутентификации и файлами cookie между клиентом и файлами cookie, лучше всего изменить имя cookie или установить контекстный пакет.
тест
Postman предоставляет метод аутентификации OAuth 2.0. Вы можете получить токен и добавить аутентификацию в HTTP -запрос, а затем запросить API REST сервера ресурсов.
Информация о клиенте
Авторизация
Получен токен
Доступ к API сервера ресурсов
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.