gluu
公開メンバ関数 | 公開変数類 | 全メンバ一覧
cred-manager-external_u2f.PersonAuthentication クラス
cred-manager-external_u2f.PersonAuthentication の継承関係図
Inheritance graph
cred-manager-external_u2f.PersonAuthentication 連携図
Collaboration graph

公開メンバ関数

def __init__ (self, currentTimeMillis)
 
def init (self, configurationAttributes)
 
def destroy (self, configurationAttributes)
 
def getApiVersion (self)
 
def isValidAuthenticationMethod (self, usageType, configurationAttributes)
 
def getAlternativeAuthenticationMethod (self, usageType, configurationAttributes)
 
def authenticate (self, configurationAttributes, requestParameters, step)
 
def prepareForStep (self, configurationAttributes, requestParameters, step)
 
def getExtraParametersForStep (self, configurationAttributes, step)
 
def getCountAuthenticationSteps (self, configurationAttributes)
 
def getPageForStep (self, configurationAttributes, step)
 
def logout (self, configurationAttributes, requestParameters)
 
def hasEnrollments (self, configurationAttributes, user)
 

公開変数類

 currentTimeMillis
 
 metaDataConfiguration
 

詳解

構築子と解体子

◆ __init__()

def cred-manager-external_u2f.PersonAuthentication.__init__ (   self,
  currentTimeMillis 
)
23  def __init__(self, currentTimeMillis):
24  self.currentTimeMillis = currentTimeMillis
25 

関数詳解

◆ authenticate()

def cred-manager-external_u2f.PersonAuthentication.authenticate (   self,
  configurationAttributes,
  requestParameters,
  step 
)
73  def authenticate(self, configurationAttributes, requestParameters, step):
74  authenticationService = CdiUtil.bean(AuthenticationService)
75 
76  identity = CdiUtil.bean(Identity)
77  credentials = identity.getCredentials()
78 
79  user_name = credentials.getUsername()
80 
81  if (step == 1):
82  print "U2F. Authenticate for step 1"
83 
84  if authenticationService.getAuthenticatedUser() != None:
85  return True
86 
87  user_password = credentials.getPassword()
88  logged_in = False
89  if (StringHelper.isNotEmptyString(user_name) and StringHelper.isNotEmptyString(user_password)):
90  userService = CdiUtil.bean(UserService)
91  logged_in = authenticationService.authenticate(user_name, user_password)
92 
93  if (not logged_in):
94  return False
95 
96  return True
97  elif (step == 2):
98  print "U2F. Authenticate for step 2"
99 
100  token_response = ServerUtil.getFirstValue(requestParameters, "tokenResponse")
101  if token_response == None:
102  print "U2F. Authenticate for step 2. tokenResponse is empty"
103  return False
104 
105  auth_method = ServerUtil.getFirstValue(requestParameters, "authMethod")
106  if auth_method == None:
107  print "U2F. Authenticate for step 2. authMethod is empty"
108  return False
109 
110  authenticationService = CdiUtil.bean(AuthenticationService)
111  user = authenticationService.getAuthenticatedUser()
112  if (user == None):
113  print "U2F. Prepare for step 2. Failed to determine user name"
114  return False
115 
116  if (auth_method == 'authenticate'):
117  print "U2F. Prepare for step 2. Call FIDO U2F in order to finish authentication workflow"
118  authenticationRequestService = FidoU2fClientFactory.instance().createAuthenticationRequestService(self.metaDataConfiguration)
119  authenticationStatus = authenticationRequestService.finishAuthentication(user.getUserId(), token_response)
120 
121  if (authenticationStatus.getStatus() != Constants.RESULT_SUCCESS):
122  print "U2F. Authenticate for step 2. Get invalid authentication status from FIDO U2F server"
123  return False
124 
125  return True
126  elif (auth_method == 'enroll'):
127  print "U2F. Prepare for step 2. Call FIDO U2F in order to finish registration workflow"
128  registrationRequestService = FidoU2fClientFactory.instance().createRegistrationRequestService(self.metaDataConfiguration)
129  registrationStatus = registrationRequestService.finishRegistration(user.getUserId(), token_response)
130 
131  if (registrationStatus.getStatus() != Constants.RESULT_SUCCESS):
132  print "U2F. Authenticate for step 2. Get invalid registration status from FIDO U2F server"
133  return False
134 
135  return True
136  else:
137  print "U2F. Prepare for step 2. Authenticatiod method is invalid"
138  return False
139 
140  return False
141  else:
142  return False
143 

◆ destroy()

def cred-manager-external_u2f.PersonAuthentication.destroy (   self,
  configurationAttributes 
)
59  def destroy(self, configurationAttributes):
60  print "U2F. Destroy"
61  print "U2F. Destroyed successfully"
62  return True
63 

◆ getAlternativeAuthenticationMethod()

def cred-manager-external_u2f.PersonAuthentication.getAlternativeAuthenticationMethod (   self,
  usageType,
  configurationAttributes 
)
70  def getAlternativeAuthenticationMethod(self, usageType, configurationAttributes):
71  return None
72 

◆ getApiVersion()

def cred-manager-external_u2f.PersonAuthentication.getApiVersion (   self)
64  def getApiVersion(self):
65  return 1
66 

◆ getCountAuthenticationSteps()

def cred-manager-external_u2f.PersonAuthentication.getCountAuthenticationSteps (   self,
  configurationAttributes 
)
203  def getCountAuthenticationSteps(self, configurationAttributes):
204  return 2
205 

◆ getExtraParametersForStep()

def cred-manager-external_u2f.PersonAuthentication.getExtraParametersForStep (   self,
  configurationAttributes,
  step 
)
200  def getExtraParametersForStep(self, configurationAttributes, step):
201  return None
202 

◆ getPageForStep()

def cred-manager-external_u2f.PersonAuthentication.getPageForStep (   self,
  configurationAttributes,
  step 
)
206  def getPageForStep(self, configurationAttributes, step):
207  if (step == 2):
208  #Modified for cred-manager compliance
209  return "/cm/login.xhtml"
210 
211  return ""
212 

◆ hasEnrollments()

def cred-manager-external_u2f.PersonAuthentication.hasEnrollments (   self,
  configurationAttributes,
  user 
)
218  def hasEnrollments(self, configurationAttributes, user):
219 
220  inum = user.getAttribute("inum")
221  devRegService = CdiUtil.bean(DeviceRegistrationService)
222  app_id = configurationAttributes.get("u2f_application_id").getValue2()
223  userDevices = devRegService.findUserDeviceRegistrations(inum, app_id, "oxStatus")
224 
225  hasDevices = False
226  for device in userDevices:
227  if device.getStatus().getValue() == "active":
228  hasDevices=True
229  break
230 
231  return hasDevices

◆ init()

def cred-manager-external_u2f.PersonAuthentication.init (   self,
  configurationAttributes 
)
26  def init(self, configurationAttributes):
27  print "U2F. Initialization"
28 
29  print "U2F. Initialization. Downloading U2F metadata"
30  u2f_server_uri = configurationAttributes.get("u2f_server_uri").getValue2()
31  #u2f_server_metadata_uri = u2f_server_uri + "/.well-known/fido-u2f-configuration"
32  u2f_server_metadata_uri = u2f_server_uri + "/oxauth/restv1/fido-u2f-configuration"
33 
34  metaDataConfigurationService = FidoU2fClientFactory.instance().createMetaDataConfigurationService(u2f_server_metadata_uri)
35 
36  max_attempts = 20
37  for attempt in range(1, max_attempts + 1):
38  try:
39  self.metaDataConfiguration = metaDataConfigurationService.getMetadataConfiguration()
40  break
41  except ClientResponseFailure, ex:
42  # Detect if last try or we still get Service Unavailable HTTP error
43  if (attempt == max_attempts) or (ex.getResponse().getResponseStatus() != Response.Status.SERVICE_UNAVAILABLE):
44  raise ex
45 
46  java.lang.Thread.sleep(3000)
47  print "Attempting to load metadata: %d" % attempt
48  except ResteasyClientException, ex:
49  # Detect if last try or we still get Service Unavailable HTTP error
50  if attempt == max_attempts:
51  raise ex
52 
53  java.lang.Thread.sleep(3000)
54  print "Attempting to load metadata: %d" % attempt
55 
56  print "U2F. Initialized successfully"
57  return True
58 

◆ isValidAuthenticationMethod()

def cred-manager-external_u2f.PersonAuthentication.isValidAuthenticationMethod (   self,
  usageType,
  configurationAttributes 
)
67  def isValidAuthenticationMethod(self, usageType, configurationAttributes):
68  return True
69 

◆ logout()

def cred-manager-external_u2f.PersonAuthentication.logout (   self,
  configurationAttributes,
  requestParameters 
)
213  def logout(self, configurationAttributes, requestParameters):
214  return True
215 

◆ prepareForStep()

def cred-manager-external_u2f.PersonAuthentication.prepareForStep (   self,
  configurationAttributes,
  requestParameters,
  step 
)
144  def prepareForStep(self, configurationAttributes, requestParameters, step):
145  identity = CdiUtil.bean(Identity)
146 
147  if (step == 1):
148  return True
149  elif (step == 2):
150  print "U2F. Prepare for step 2"
151 
152  session_id = CdiUtil.bean(SessionIdService).getSessionIdFromCookie()
153  if StringHelper.isEmpty(session_id):
154  print "U2F. Prepare for step 2. Failed to determine session_id"
155  return False
156 
157  authenticationService = CdiUtil.bean(AuthenticationService)
158  user = authenticationService.getAuthenticatedUser()
159  if (user == None):
160  print "U2F. Prepare for step 2. Failed to determine user name"
161  return False
162 
163  u2f_application_id = configurationAttributes.get("u2f_application_id").getValue2()
164 
165  # Check if user have registered devices
166  deviceRegistrationService = CdiUtil.bean(DeviceRegistrationService)
167 
168  userInum = user.getAttribute("inum")
169 
170  registrationRequest = None
171  authenticationRequest = None
172 
173  deviceRegistrations = deviceRegistrationService.findUserDeviceRegistrations(userInum, u2f_application_id)
174  if (deviceRegistrations.size() > 0):
175  print "U2F. Prepare for step 2. Call FIDO U2F in order to start authentication workflow"
176 
177  try:
178  authenticationRequestService = FidoU2fClientFactory.instance().createAuthenticationRequestService(self.metaDataConfiguration)
179  authenticationRequest = authenticationRequestService.startAuthentication(user.getUserId(), None, u2f_application_id, session_id)
180  except ClientResponseFailure, ex:
181  if (ex.getResponse().getResponseStatus() != Response.Status.NOT_FOUND):
182  print "U2F. Prepare for step 2. Failed to start authentication workflow. Exception:", sys.exc_info()[1]
183  return False
184  else:
185  print "U2F. Prepare for step 2. Call FIDO U2F in order to start registration workflow"
186  registrationRequestService = FidoU2fClientFactory.instance().createRegistrationRequestService(self.metaDataConfiguration)
187  registrationRequest = registrationRequestService.startRegistration(user.getUserId(), u2f_application_id, session_id)
188 
189  identity.setWorkingParameter("fido_u2f_authentication_request", ServerUtil.asJson(authenticationRequest))
190  identity.setWorkingParameter("fido_u2f_registration_request", ServerUtil.asJson(registrationRequest))
191 
192  return True
193  elif (step == 3):
194  print "U2F. Prepare for step 3"
195 
196  return True
197  else:
198  return False
199 

メンバ詳解

◆ currentTimeMillis

cred-manager-external_u2f.PersonAuthentication.currentTimeMillis

◆ metaDataConfiguration

cred-manager-external_u2f.PersonAuthentication.metaDataConfiguration

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