Протоколи OpenID 1.0 та 2.0 застаріли, тому користувачам рекомендується перейти на OpenID Connect, який підтримується spring-security-oauth2.

Простір імен підтримує вхід до системи за допомогою OpenID, замість або на додаток до звичайного входу до системи через форму, для чого потрібно внести лише невелику зміну:

<http>
<intercept-url pattern="/**" access="ROLE_USER" />
<openid-login />
</http>

Потім слід зареєструватися через постачальника OpenID (наприклад, myopenid.com) і додати інформацію про користувача до пам'яті <user-service>:

<user name="https://jimi.hendrix.myopenid.com/" authorities="ROLE_USER" />

Ти маєш ввійти в систему, використовуючи сайт myopenid.com для аутентифікації. Також можна вибрати конкретний бін UserDetailsService для використання OpenID, встановивши атрибут user-service-ref в елементі openid-login. Зверни увагу, що ми опустили атрибут пароля з наведеної вище конфігурації користувача, оскільки цей набір даних використовується тільки для того, щоб завантажити повноваження для користувача. Пароль буде згенерований на внутрішньому рівні випадковим чином, що запобігатиме ненавмисному використанню цих даних користувача як джерела автентифікації в інших місцях конфігурації.

Обмін атрибутами

Підтримка обмін атрибутами в OpenID. Як приклад у наступній конфігурації спробуємо отримати адресу електронної пошти та повне ім'я від постачальника OpenID для використання програмою:

<openid-login>
<attribute-exchange>
<openid-attribute name="email" type="https://axschema.org/contact/email" required="true"/>
<openid-attribute name="name" type="https://axschema.org/namePerson"/>
</attribute-exchange>
</openid-login>

"Тип" кожного атрибуту OpenID — це URI, який визначається конкретною схемою, в даному випадку https://axschema.org/. Якщо потрібно отримати атрибут для успішної аутентифікації, можна встановити required атрибут. Точна схема та підтримувані атрибути залежать від постачальника OpenID. Значення атрибутів повертаються як компонент процесу аутентифікації, а потім доступ до них можна отримати за допомогою наступного коду:

OpenIDAuthenticationToken token =
(OpenIDAuthenticationToken)SecurityContextHolder.getContext().getAuthentication();
List<OpenIDAttribute> attributes = token.getAttributes();

Ми можемо отримати OpenIDAuthenticationToken з SecurityContextHolder. OpenIDAttribute містить тип атрибуту та вилучене значення (або значення у разі багатозначних атрибутів). Ти можеш передати кілька елементів attribute-exchange, використовуючи атрибут identifier-matcher для кожного з них. Містить регулярний вираз, який буде зіставлений з ідентифікатором OpenID, що передається користувачем. Приклад конфігурації див. у кодовій базі для прикладу OpenID, в якому представлені різні списки атрибутів для постачальників Google, Yahoo і MyOpenID.