gluu
公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.xdi.oxauth.service.fido.u2f.AuthenticationService クラス
org.xdi.oxauth.service.fido.u2f.AuthenticationService の継承関係図
Inheritance graph
org.xdi.oxauth.service.fido.u2f.AuthenticationService 連携図
Collaboration graph

公開メンバ関数

AuthenticateRequestMessage buildAuthenticateRequestMessage (String appId, String userInum) throws BadInputException, NoEligableDevicesException
 
AuthenticateRequest startAuthentication (String appId, DeviceRegistration device) throws DeviceCompromisedException
 
AuthenticateRequest startAuthentication (String appId, DeviceRegistration device, byte[] challenge) throws DeviceCompromisedException
 
DeviceRegistrationResult finishAuthentication (AuthenticateRequestMessage requestMessage, AuthenticateResponse response, String userInum) throws BadInputException, DeviceCompromisedException
 
DeviceRegistrationResult finishAuthentication (AuthenticateRequestMessage requestMessage, AuthenticateResponse response, String userInum, Set< String > facets) throws BadInputException, DeviceCompromisedException
 
AuthenticateRequest getAuthenticateRequest (AuthenticateRequestMessage requestMessage, AuthenticateResponse response) throws BadInputException
 
void storeAuthenticationRequestMessage (AuthenticateRequestMessage requestMessage, String userInum, String sessionId)
 
AuthenticateRequestMessage getAuthenticationRequestMessage (String oxId)
 
AuthenticateRequestMessageLdap getAuthenticationRequestMessageByRequestId (String requestId)
 
void removeAuthenticationRequestMessage (AuthenticateRequestMessageLdap authenticateRequestMessageLdap)
 
String getUserInumByKeyHandle (String appId, String keyHandle) throws InvalidKeyHandleDeviceException
 
String getDnForAuthenticateRequestMessage (String oxId)
 
List< RequestMessageLdapgetExpiredRequestMessages (BatchOperation< RequestMessageLdap > batchOperation, Date expirationDate, String[] returnAttributes, int sizeLimit, int chunkSize)
 
void removeRequestMessage (RequestMessageLdap requestMessageLdap)
 

非公開変数類

Logger log
 
PersistenceEntryManager ldapEntryManager
 
ApplicationService applicationService
 
RawAuthenticationService rawAuthenticationService
 
ClientDataValidationService clientDataValidationService
 
DeviceRegistrationService deviceRegistrationService
 
UserService userService
 
ChallengeGenerator challengeGenerator
 
StaticConfiguration staticConfiguration
 

詳解

Provides operations with U2F authentication request

著者
Yuriy Movchan
バージョン
August 9, 2017

関数詳解

◆ buildAuthenticateRequestMessage()

AuthenticateRequestMessage org.xdi.oxauth.service.fido.u2f.AuthenticationService.buildAuthenticateRequestMessage ( String  appId,
String  userInum 
) throws BadInputException, NoEligableDevicesException
inline
80  {
83  }
84 
85  List<AuthenticateRequest> authenticateRequests = new ArrayList<AuthenticateRequest>();
86  byte[] challenge = challengeGenerator.generateChallenge();
87 
88  List<DeviceRegistration> deviceRegistrations = deviceRegistrationService.findUserDeviceRegistrations(userInum, appId);
89  for (DeviceRegistration deviceRegistration : deviceRegistrations) {
90  if (!deviceRegistration.isCompromised()) {
91  AuthenticateRequest request;
92  try {
93  request = startAuthentication(appId, deviceRegistration, challenge);
94  authenticateRequests.add(request);
95  } catch (DeviceCompromisedException ex) {
96  log.error("Faield to authenticate device", ex);
97  }
98  }
99  }
100 
101  if (authenticateRequests.isEmpty()) {
102  if (deviceRegistrations.isEmpty()) {
103  throw new NoEligableDevicesException(deviceRegistrations, "No devices registrered");
104  } else {
105  throw new NoEligableDevicesException(deviceRegistrations, "All devices compromised");
106  }
107  }
108 
109  return new AuthenticateRequestMessage(authenticateRequests);
110  }
boolean isValidateApplication()
Definition: ApplicationService.java:29
ApplicationService applicationService
Definition: AuthenticationService.java:59
Logger log
Definition: AuthenticationService.java:53
AuthenticateRequest startAuthentication(String appId, DeviceRegistration device)
Definition: AuthenticationService.java:112
List< DeviceRegistration > findUserDeviceRegistrations(String userInum, String appId, String ... returnAttributes)
Definition: DeviceRegistrationService.java:78
DeviceRegistrationService deviceRegistrationService
Definition: AuthenticationService.java:68
void checkIsValid(String appId)
Definition: ApplicationService.java:41
ChallengeGenerator challengeGenerator
Definition: AuthenticationService.java:75

◆ finishAuthentication() [1/2]

DeviceRegistrationResult org.xdi.oxauth.service.fido.u2f.AuthenticationService.finishAuthentication ( AuthenticateRequestMessage  requestMessage,
AuthenticateResponse  response,
String  userInum 
) throws BadInputException, DeviceCompromisedException
inline
125  {
126  return finishAuthentication(requestMessage, response, userInum, null);
127  }
DeviceRegistrationResult finishAuthentication(AuthenticateRequestMessage requestMessage, AuthenticateResponse response, String userInum)
Definition: AuthenticationService.java:124

◆ finishAuthentication() [2/2]

DeviceRegistrationResult org.xdi.oxauth.service.fido.u2f.AuthenticationService.finishAuthentication ( AuthenticateRequestMessage  requestMessage,
AuthenticateResponse  response,
String  userInum,
Set< String >  facets 
) throws BadInputException, DeviceCompromisedException
inline
130  {
131  List<DeviceRegistration> deviceRegistrations = deviceRegistrationService.findUserDeviceRegistrations(userInum, requestMessage.getAppId());
132 
133  final AuthenticateRequest request = getAuthenticateRequest(requestMessage, response);
134 
135  DeviceRegistration usedDeviceRegistration = null;
136  for (DeviceRegistration deviceRegistration : deviceRegistrations) {
137  if (StringHelper.equals(request.getKeyHandle(), deviceRegistration.getKeyHandle())) {
138  usedDeviceRegistration = deviceRegistration;
139  break;
140  }
141  }
142 
143  if (usedDeviceRegistration == null) {
144  throw new BadInputException("Failed to find DeviceRegistration for the given AuthenticateRequest");
145  }
146 
147  if (usedDeviceRegistration.isCompromised()) {
148  throw new DeviceCompromisedException(usedDeviceRegistration, "The device is marked as possibly compromised, and cannot be authenticated");
149  }
150 
151  ClientData clientData = response.getClientData();
152  clientDataValidationService.checkContent(clientData, RawAuthenticationService.SUPPORTED_AUTHENTICATE_TYPES, request.getChallenge(), facets);
153 
154  RawAuthenticateResponse rawAuthenticateResponse = rawAuthenticationService.parseRawAuthenticateResponse(response.getSignatureData());
155  rawAuthenticationService.checkSignature(request.getAppId(), clientData, rawAuthenticateResponse,
156  Base64Util.base64urldecode(usedDeviceRegistration.getDeviceRegistrationConfiguration().getPublicKey()));
157  rawAuthenticateResponse.checkUserPresence();
158  usedDeviceRegistration.checkAndUpdateCounter(rawAuthenticateResponse.getCounter());
159 
160  usedDeviceRegistration.setLastAccessTime(new Date());
161 
162  deviceRegistrationService.updateDeviceRegistration(userInum, usedDeviceRegistration);
163 
164  DeviceRegistrationResult.Status status = DeviceRegistrationResult.Status.APPROVED;
165 
166  boolean approved = StringHelper.equals(RawAuthenticationService.AUTHENTICATE_GET_TYPE, clientData.getTyp());
167  if (!approved) {
168  status = DeviceRegistrationResult.Status.CANCELED;
169  log.debug("Authentication request with keyHandle '{}' was canceled", response.getKeyHandle());
170  }
171 
172  return new DeviceRegistrationResult(usedDeviceRegistration, status);
173  }
RawAuthenticationService rawAuthenticationService
Definition: AuthenticationService.java:62
RawAuthenticateResponse parseRawAuthenticateResponse(String rawDataBase64)
Definition: RawAuthenticationService.java:47
AuthenticateRequest getAuthenticateRequest(AuthenticateRequestMessage requestMessage, AuthenticateResponse response)
Definition: AuthenticationService.java:175
Logger log
Definition: AuthenticationService.java:53
void checkContent(ClientData clientData, String[] types, String challenge, Set< String > facets)
Definition: ClientDataValidationService.java:35
List< DeviceRegistration > findUserDeviceRegistrations(String userInum, String appId, String ... returnAttributes)
Definition: DeviceRegistrationService.java:78
DeviceRegistrationService deviceRegistrationService
Definition: AuthenticationService.java:68
void updateDeviceRegistration(String userInum, DeviceRegistration deviceRegistration)
Definition: DeviceRegistrationService.java:143
ClientDataValidationService clientDataValidationService
Definition: AuthenticationService.java:65
void checkSignature(String appId, ClientData clientData, RawAuthenticateResponse rawAuthenticateResponse, byte[] publicKey)
Definition: RawAuthenticationService.java:58

◆ getAuthenticateRequest()

AuthenticateRequest org.xdi.oxauth.service.fido.u2f.AuthenticationService.getAuthenticateRequest ( AuthenticateRequestMessage  requestMessage,
AuthenticateResponse  response 
) throws BadInputException
inline
175  {
176  if (!StringHelper.equals(requestMessage.getRequestId(), response.getRequestId())) {
177  throw new BadInputException("Wrong request for response data");
178  }
179 
180  for (AuthenticateRequest request : requestMessage.getAuthenticateRequests()) {
181  if (StringHelper.equals(request.getKeyHandle(), response.getKeyHandle())) {
182  return request;
183  }
184  }
185 
186  throw new BadInputException("Responses keyHandle does not match any contained request");
187  }

◆ getAuthenticationRequestMessage()

AuthenticateRequestMessage org.xdi.oxauth.service.fido.u2f.AuthenticationService.getAuthenticationRequestMessage ( String  oxId)
inline
199  {
200  String requestDn = getDnForAuthenticateRequestMessage(oxId);
201 
202  AuthenticateRequestMessageLdap authenticateRequestMessageLdap = ldapEntryManager.find(AuthenticateRequestMessageLdap.class, requestDn);
203  if (authenticateRequestMessageLdap == null) {
204  return null;
205  }
206 
207  return authenticateRequestMessageLdap.getAuthenticateRequestMessage();
208  }
PersistenceEntryManager ldapEntryManager
Definition: AuthenticationService.java:56
String getDnForAuthenticateRequestMessage(String oxId)
Definition: AuthenticationService.java:249

◆ getAuthenticationRequestMessageByRequestId()

AuthenticateRequestMessageLdap org.xdi.oxauth.service.fido.u2f.AuthenticationService.getAuthenticationRequestMessageByRequestId ( String  requestId)
inline
210  {
211  String baseDn = getDnForAuthenticateRequestMessage(null);
212  Filter requestIdFilter = Filter.createEqualityFilter("oxRequestId", requestId);
213 
214  List<AuthenticateRequestMessageLdap> authenticateRequestMessagesLdap = ldapEntryManager.findEntries(baseDn, AuthenticateRequestMessageLdap.class,
215  requestIdFilter);
216  if ((authenticateRequestMessagesLdap == null) || authenticateRequestMessagesLdap.isEmpty()) {
217  return null;
218  }
219 
220  return authenticateRequestMessagesLdap.get(0);
221  }
PersistenceEntryManager ldapEntryManager
Definition: AuthenticationService.java:56
String getDnForAuthenticateRequestMessage(String oxId)
Definition: AuthenticationService.java:249

◆ getDnForAuthenticateRequestMessage()

String org.xdi.oxauth.service.fido.u2f.AuthenticationService.getDnForAuthenticateRequestMessage ( String  oxId)
inline

Build DN string for U2F authentication request

249  {
250  final String u2fBaseDn = staticConfiguration.getBaseDn().getU2fBase(); // ou=authentication_requests,ou=u2f,o=@!1111,o=gluu
251  if (StringHelper.isEmpty(oxId)) {
252  return String.format("ou=authentication_requests,%s", u2fBaseDn);
253  }
254 
255  return String.format("oxid=%s,ou=authentication_requests,%s", oxId, u2fBaseDn);
256  }
String getU2fBase()
Definition: BaseDnConfiguration.java:133
StaticConfiguration staticConfiguration
Definition: AuthenticationService.java:78
BaseDnConfiguration getBaseDn()
Definition: StaticConfiguration.java:32

◆ getExpiredRequestMessages()

List<RequestMessageLdap> org.xdi.oxauth.service.fido.u2f.RequestService.getExpiredRequestMessages ( BatchOperation< RequestMessageLdap batchOperation,
Date  expirationDate,
String []  returnAttributes,
int  sizeLimit,
int  chunkSize 
)
inlineinherited
42  {
43  final String u2fBaseDn = staticConfiguration.getBaseDn().getU2fBase(); // ou=u2f,o=@!1111,o=gluu
44  Filter expirationFilter = Filter.createLessOrEqualFilter("creationDate", ldapEntryManager.encodeTime(expirationDate));
45 
46  List<RequestMessageLdap> requestMessageLdap = ldapEntryManager.findEntries(u2fBaseDn, RequestMessageLdap.class, expirationFilter, SearchScope.SUB, returnAttributes, batchOperation, 0, sizeLimit, chunkSize);
47 
48  return requestMessageLdap;
49  }
String getU2fBase()
Definition: BaseDnConfiguration.java:133
PersistenceEntryManager ldapEntryManager
Definition: RequestService.java:37
StaticConfiguration staticConfiguration
Definition: RequestService.java:40
BaseDnConfiguration getBaseDn()
Definition: StaticConfiguration.java:32

◆ getUserInumByKeyHandle()

String org.xdi.oxauth.service.fido.u2f.AuthenticationService.getUserInumByKeyHandle ( String  appId,
String  keyHandle 
) throws InvalidKeyHandleDeviceException
inline
227  {
228  if (org.xdi.util.StringHelper.isEmpty(appId) || StringHelper.isEmpty(keyHandle)) {
229  return null;
230  }
231 
232  List<DeviceRegistration> deviceRegistrations = deviceRegistrationService.findDeviceRegistrationsByKeyHandle(appId, keyHandle, "oxId");
233  if (deviceRegistrations.isEmpty()) {
234  throw new InvalidKeyHandleDeviceException(String.format("Failed to find device by keyHandle '%s' in LDAP", keyHandle));
235  }
236 
237  if (deviceRegistrations.size() != 1) {
238  throw new BadInputException(String.format("There are '%d' devices with keyHandle '%s' in LDAP", deviceRegistrations.size(), keyHandle));
239  }
240 
241  DeviceRegistration deviceRegistration = deviceRegistrations.get(0);
242 
243  return userService.getUserInumByDn(deviceRegistration.getDn());
244  }
DeviceRegistrationService deviceRegistrationService
Definition: AuthenticationService.java:68
List< DeviceRegistration > findDeviceRegistrationsByKeyHandle(String appId, String keyHandle, String ... returnAttributes)
Definition: DeviceRegistrationService.java:87
UserService userService
Definition: AuthenticationService.java:71
String getUserInumByDn(String dn)
Definition: UserService.java:402

◆ removeAuthenticationRequestMessage()

void org.xdi.oxauth.service.fido.u2f.AuthenticationService.removeAuthenticationRequestMessage ( AuthenticateRequestMessageLdap  authenticateRequestMessageLdap)
inline
223  {
224  removeRequestMessage(authenticateRequestMessageLdap);
225  }
void removeRequestMessage(RequestMessageLdap requestMessageLdap)
Definition: RequestService.java:51

◆ removeRequestMessage()

void org.xdi.oxauth.service.fido.u2f.RequestService.removeRequestMessage ( RequestMessageLdap  requestMessageLdap)
inlineinherited
51  {
52  ldapEntryManager.remove(requestMessageLdap);
53  }
PersistenceEntryManager ldapEntryManager
Definition: RequestService.java:37

◆ startAuthentication() [1/2]

AuthenticateRequest org.xdi.oxauth.service.fido.u2f.AuthenticationService.startAuthentication ( String  appId,
DeviceRegistration  device 
) throws DeviceCompromisedException
inline
112  {
114  }
AuthenticateRequest startAuthentication(String appId, DeviceRegistration device)
Definition: AuthenticationService.java:112
ChallengeGenerator challengeGenerator
Definition: AuthenticationService.java:75

◆ startAuthentication() [2/2]

AuthenticateRequest org.xdi.oxauth.service.fido.u2f.AuthenticationService.startAuthentication ( String  appId,
DeviceRegistration  device,
byte []  challenge 
) throws DeviceCompromisedException
inline
116  {
117  if (device.isCompromised()) {
118  throw new DeviceCompromisedException(device, "Device has been marked as compromised, cannot authenticate");
119  }
120 
121  return new AuthenticateRequest(Base64Util.base64urlencode(challenge), appId, device.getKeyHandle());
122  }

◆ storeAuthenticationRequestMessage()

void org.xdi.oxauth.service.fido.u2f.AuthenticationService.storeAuthenticationRequestMessage ( AuthenticateRequestMessage  requestMessage,
String  userInum,
String  sessionId 
)
inline
189  {
190  Date now = new GregorianCalendar(TimeZone.getTimeZone("UTC")).getTime();
191  final String authenticateRequestMessageId = UUID.randomUUID().toString();
192 
193  AuthenticateRequestMessageLdap authenticateRequestMessageLdap = new AuthenticateRequestMessageLdap(getDnForAuthenticateRequestMessage(authenticateRequestMessageId),
194  authenticateRequestMessageId, now, sessionId, userInum, requestMessage);
195 
196  ldapEntryManager.persist(authenticateRequestMessageLdap);
197  }
PersistenceEntryManager ldapEntryManager
Definition: AuthenticationService.java:56
String getDnForAuthenticateRequestMessage(String oxId)
Definition: AuthenticationService.java:249

メンバ詳解

◆ applicationService

ApplicationService org.xdi.oxauth.service.fido.u2f.AuthenticationService.applicationService
private

◆ challengeGenerator

ChallengeGenerator org.xdi.oxauth.service.fido.u2f.AuthenticationService.challengeGenerator
private

◆ clientDataValidationService

ClientDataValidationService org.xdi.oxauth.service.fido.u2f.AuthenticationService.clientDataValidationService
private

◆ deviceRegistrationService

DeviceRegistrationService org.xdi.oxauth.service.fido.u2f.AuthenticationService.deviceRegistrationService
private

◆ ldapEntryManager

PersistenceEntryManager org.xdi.oxauth.service.fido.u2f.AuthenticationService.ldapEntryManager
private

◆ log

Logger org.xdi.oxauth.service.fido.u2f.AuthenticationService.log
private

◆ rawAuthenticationService

RawAuthenticationService org.xdi.oxauth.service.fido.u2f.AuthenticationService.rawAuthenticationService
private

◆ staticConfiguration

StaticConfiguration org.xdi.oxauth.service.fido.u2f.AuthenticationService.staticConfiguration
private

◆ userService

UserService org.xdi.oxauth.service.fido.u2f.AuthenticationService.userService
private

このクラス詳解は次のファイルから抽出されました: