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

公開メンバ関数

RegisterRequestMessage builRegisterRequestMessage (String appId, String userInum)
 
RegisterRequest startRegistration (String appId)
 
RegisterRequest startRegistration (String appId, byte[] challenge)
 
DeviceRegistrationResult finishRegistration (RegisterRequestMessage requestMessage, RegisterResponse response, String userInum) throws BadInputException
 
DeviceRegistrationResult finishRegistration (RegisterRequestMessage requestMessage, RegisterResponse response, String userInum, Set< String > facets) throws BadInputException
 
void storeRegisterRequestMessage (RegisterRequestMessage requestMessage, String userInum, String sessionId)
 
RegisterRequestMessage getRegisterRequestMessage (String oxId)
 
RegisterRequestMessageLdap getRegisterRequestMessageByRequestId (String requestId)
 
void removeRegisterRequestMessage (RequestMessageLdap registerRequestMessageLdap)
 
String getDnForRegisterRequestMessage (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
 
UserService userService
 
AuthenticationService u2fAuthenticationService
 
RawRegistrationService rawRegistrationService
 
ClientDataValidationService clientDataValidationService
 
DeviceRegistrationService deviceRegistrationService
 
ChallengeGenerator challengeGenerator
 
StaticConfiguration staticConfiguration
 

詳解

Provides operations with U2F registration requests

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

関数詳解

◆ builRegisterRequestMessage()

RegisterRequestMessage org.xdi.oxauth.service.fido.u2f.RegistrationService.builRegisterRequestMessage ( String  appId,
String  userInum 
)
inline
86  {
89  }
90 
91  List<AuthenticateRequest> authenticateRequests = new ArrayList<AuthenticateRequest>();
92  List<RegisterRequest> registerRequests = new ArrayList<RegisterRequest>();
93 
94  boolean twoStep = StringHelper.isNotEmpty(userInum);
95  if (twoStep) {
96  // In two steps we expects not empty userInum
97  List<DeviceRegistration> deviceRegistrations = deviceRegistrationService.findUserDeviceRegistrations(userInum, appId);
98  for (DeviceRegistration deviceRegistration : deviceRegistrations) {
99  if (!deviceRegistration.isCompromised()) {
100  try {
101  AuthenticateRequest authenticateRequest = u2fAuthenticationService.startAuthentication(appId, deviceRegistration);
102  authenticateRequests.add(authenticateRequest);
103  } catch (DeviceCompromisedException ex) {
104  log.error("Faield to authenticate device", ex);
105  }
106  }
107  }
108  }
109 
110  RegisterRequest request = startRegistration(appId);
111  registerRequests.add(request);
112 
113  return new RegisterRequestMessage(authenticateRequests, registerRequests);
114  }
boolean isValidateApplication()
Definition: ApplicationService.java:29
Logger log
Definition: RegistrationService.java:56
AuthenticateRequest startAuthentication(String appId, DeviceRegistration device)
Definition: AuthenticationService.java:112
List< DeviceRegistration > findUserDeviceRegistrations(String userInum, String appId, String ... returnAttributes)
Definition: DeviceRegistrationService.java:78
RegisterRequest startRegistration(String appId)
Definition: RegistrationService.java:116
ApplicationService applicationService
Definition: RegistrationService.java:62
void checkIsValid(String appId)
Definition: ApplicationService.java:41
DeviceRegistrationService deviceRegistrationService
Definition: RegistrationService.java:77
AuthenticationService u2fAuthenticationService
Definition: RegistrationService.java:68

◆ finishRegistration() [1/2]

DeviceRegistrationResult org.xdi.oxauth.service.fido.u2f.RegistrationService.finishRegistration ( RegisterRequestMessage  requestMessage,
RegisterResponse  response,
String  userInum 
) throws BadInputException
inline
124  {
125  return finishRegistration(requestMessage, response, userInum, null);
126  }
DeviceRegistrationResult finishRegistration(RegisterRequestMessage requestMessage, RegisterResponse response, String userInum)
Definition: RegistrationService.java:124

◆ finishRegistration() [2/2]

DeviceRegistrationResult org.xdi.oxauth.service.fido.u2f.RegistrationService.finishRegistration ( RegisterRequestMessage  requestMessage,
RegisterResponse  response,
String  userInum,
Set< String >  facets 
) throws BadInputException
inline
129  {
130  RegisterRequest request = requestMessage.getRegisterRequest();
131  String appId = request.getAppId();
132 
133  ClientData clientData = response.getClientData();
134  clientDataValidationService.checkContent(clientData, RawRegistrationService.SUPPORTED_REGISTER_TYPES, request.getChallenge(), facets);
135 
136  RawRegisterResponse rawRegisterResponse = rawRegistrationService.parseRawRegisterResponse(response.getRegistrationData());
137  rawRegistrationService.checkSignature(appId, clientData, rawRegisterResponse);
138 
139  Date now = new GregorianCalendar(TimeZone.getTimeZone("UTC")).getTime();
140  DeviceRegistration deviceRegistration = rawRegistrationService.createDevice(rawRegisterResponse);
141  deviceRegistration.setStatus(DeviceRegistrationStatus.ACTIVE);
142  deviceRegistration.setApplication(appId);
143  deviceRegistration.setCreationDate(now);
144 
145  int keyHandleHashCode = deviceRegistrationService.getKeyHandleHashCode(rawRegisterResponse.getKeyHandle());
146  deviceRegistration.setKeyHandleHashCode(keyHandleHashCode);
147 
148  final String deviceRegistrationId = String.valueOf(System.currentTimeMillis());
149  deviceRegistration.setId(deviceRegistrationId);
150 
151  String responseDeviceData = response.getDeviceData();
152  if (StringHelper.isNotEmpty(responseDeviceData)) {
153  try {
154  String responseDeviceDataDecoded = new String(Base64Util.base64urldecode(responseDeviceData));
155  DeviceData deviceData = ServerUtil.jsonMapperWithWrapRoot().readValue(responseDeviceDataDecoded, DeviceData.class);
156  deviceRegistration.setDeviceData(deviceData);
157  } catch (Exception ex) {
158  throw new BadInputException(String.format("Device data is invalid: %s", responseDeviceData), ex);
159  }
160  }
161 
162  boolean approved = StringHelper.equals(RawRegistrationService.REGISTER_FINISH_TYPE, response.getClientData().getTyp());
163  if (!approved) {
164  log.debug("Registratio request with keyHandle '{}' was canceled", rawRegisterResponse.getKeyHandle());
165  return new DeviceRegistrationResult(deviceRegistration, DeviceRegistrationResult.Status.CANCELED);
166  }
167 
168  boolean twoStep = StringHelper.isNotEmpty(userInum);
169  if (twoStep) {
170  deviceRegistration.setDn(deviceRegistrationService.getDnForU2fDevice(userInum, deviceRegistrationId));
171 
172  // Check if there is device registration with keyHandle in LDAP already
173  List<DeviceRegistration> foundDeviceRegistrations = deviceRegistrationService.findDeviceRegistrationsByKeyHandle(appId, deviceRegistration.getKeyHandle(), "oxId");
174  if (foundDeviceRegistrations.size() != 0) {
175  throw new BadInputException(String.format("KeyHandle %s was compromised", deviceRegistration.getKeyHandle()));
176  }
177 
178  deviceRegistrationService.addUserDeviceRegistration(userInum, deviceRegistration);
179  } else {
180  deviceRegistration.setDn(deviceRegistrationService.getDnForOneStepU2fDevice(deviceRegistrationId));
181 
183  }
184 
185  return new DeviceRegistrationResult(deviceRegistration, DeviceRegistrationResult.Status.APPROVED);
186  }
int getKeyHandleHashCode(byte[] keyHandle)
Definition: DeviceRegistrationService.java:208
void addUserDeviceRegistration(String userInum, DeviceRegistration deviceRegistration)
Definition: DeviceRegistrationService.java:112
Logger log
Definition: RegistrationService.java:56
RawRegisterResponse parseRawRegisterResponse(String rawDataBase64)
Definition: RawRegistrationService.java:55
void setStatus(DeviceRegistrationStatus status)
Definition: DeviceRegistration.java:164
void checkSignature(String appId, ClientData clientData, RawRegisterResponse rawRegisterResponse)
Definition: RawRegistrationService.java:74
void checkContent(ClientData clientData, String[] types, String challenge, Set< String > facets)
Definition: ClientDataValidationService.java:35
String getDnForU2fDevice(String userInum, String oxId)
Definition: DeviceRegistrationService.java:181
ClientDataValidationService clientDataValidationService
Definition: RegistrationService.java:74
List< DeviceRegistration > findDeviceRegistrationsByKeyHandle(String appId, String keyHandle, String ... returnAttributes)
Definition: DeviceRegistrationService.java:87
RawRegistrationService rawRegistrationService
Definition: RegistrationService.java:71
DeviceRegistration createDevice(RawRegisterResponse rawRegisterResponse)
Definition: RawRegistrationService.java:96
DeviceRegistrationService deviceRegistrationService
Definition: RegistrationService.java:77
void addOneStepDeviceRegistration(DeviceRegistration deviceRegistration)
Definition: DeviceRegistrationService.java:139
String getDnForOneStepU2fDevice(String deviceRegistrationId)
Definition: DeviceRegistrationService.java:194

◆ getDnForRegisterRequestMessage()

String org.xdi.oxauth.service.fido.u2f.RegistrationService.getDnForRegisterRequestMessage ( String  oxId)
inline

Build DN string for U2F register request

229  {
230  final String u2fBaseDn = staticConfiguration.getBaseDn().getU2fBase(); // ou=registration_requests,ou=u2f,o=@!1111,o=gluu
231  if (StringHelper.isEmpty(oxId)) {
232  return String.format("ou=registration_requests,%s", u2fBaseDn);
233  }
234 
235  return String.format("oxid=%s,ou=registration_requests,%s", oxId, u2fBaseDn);
236  }
String getU2fBase()
Definition: BaseDnConfiguration.java:133
StaticConfiguration staticConfiguration
Definition: RegistrationService.java:84
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

◆ getRegisterRequestMessage()

RegisterRequestMessage org.xdi.oxauth.service.fido.u2f.RegistrationService.getRegisterRequestMessage ( String  oxId)
inline
198  {
199  String requestDn = getDnForRegisterRequestMessage(oxId);
200 
201  RegisterRequestMessageLdap registerRequestMessageLdap = ldapEntryManager.find(RegisterRequestMessageLdap.class, requestDn);
202  if (registerRequestMessageLdap == null) {
203  return null;
204  }
205 
206  return registerRequestMessageLdap.getRegisterRequestMessage();
207  }
String getDnForRegisterRequestMessage(String oxId)
Definition: RegistrationService.java:229
PersistenceEntryManager ldapEntryManager
Definition: RegistrationService.java:59

◆ getRegisterRequestMessageByRequestId()

RegisterRequestMessageLdap org.xdi.oxauth.service.fido.u2f.RegistrationService.getRegisterRequestMessageByRequestId ( String  requestId)
inline
209  {
210  String baseDn = getDnForRegisterRequestMessage(null);
211  Filter requestIdFilter = Filter.createEqualityFilter("oxRequestId", requestId);
212 
213  List<RegisterRequestMessageLdap> registerRequestMessagesLdap = ldapEntryManager.findEntries(baseDn, RegisterRequestMessageLdap.class,
214  requestIdFilter);
215  if ((registerRequestMessagesLdap == null) || registerRequestMessagesLdap.isEmpty()) {
216  return null;
217  }
218 
219  return registerRequestMessagesLdap.get(0);
220  }
String getDnForRegisterRequestMessage(String oxId)
Definition: RegistrationService.java:229
PersistenceEntryManager ldapEntryManager
Definition: RegistrationService.java:59

◆ removeRegisterRequestMessage()

void org.xdi.oxauth.service.fido.u2f.RegistrationService.removeRegisterRequestMessage ( RequestMessageLdap  registerRequestMessageLdap)
inline
222  {
223  removeRequestMessage(registerRequestMessageLdap);
224  }
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

◆ startRegistration() [1/2]

RegisterRequest org.xdi.oxauth.service.fido.u2f.RegistrationService.startRegistration ( String  appId)
inline
116  {
118  }
RegisterRequest startRegistration(String appId)
Definition: RegistrationService.java:116
ChallengeGenerator challengeGenerator
Definition: RegistrationService.java:81

◆ startRegistration() [2/2]

RegisterRequest org.xdi.oxauth.service.fido.u2f.RegistrationService.startRegistration ( String  appId,
byte []  challenge 
)
inline
120  {
121  return new RegisterRequest(Base64Util.base64urlencode(challenge), appId);
122  }

◆ storeRegisterRequestMessage()

void org.xdi.oxauth.service.fido.u2f.RegistrationService.storeRegisterRequestMessage ( RegisterRequestMessage  requestMessage,
String  userInum,
String  sessionId 
)
inline
188  {
189  Date now = new GregorianCalendar(TimeZone.getTimeZone("UTC")).getTime();
190  final String registerRequestMessageId = UUID.randomUUID().toString();
191 
192  RequestMessageLdap registerRequestMessageLdap = new RegisterRequestMessageLdap(getDnForRegisterRequestMessage(registerRequestMessageId),
193  registerRequestMessageId, now, sessionId, userInum, requestMessage);
194 
195  ldapEntryManager.persist(registerRequestMessageLdap);
196  }
String getDnForRegisterRequestMessage(String oxId)
Definition: RegistrationService.java:229
PersistenceEntryManager ldapEntryManager
Definition: RegistrationService.java:59

メンバ詳解

◆ applicationService

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

◆ challengeGenerator

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

◆ clientDataValidationService

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

◆ deviceRegistrationService

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

◆ ldapEntryManager

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

◆ log

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

◆ rawRegistrationService

RawRegistrationService org.xdi.oxauth.service.fido.u2f.RegistrationService.rawRegistrationService
private

◆ staticConfiguration

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

◆ u2fAuthenticationService

AuthenticationService org.xdi.oxauth.service.fido.u2f.RegistrationService.u2fAuthenticationService
private

◆ userService

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

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