The implementation of this interface are assumed to be stateless, if there is a need to share state between the authenticate and handleComplete calls then it should be held in the HttpServerExchange.
As an in-bound request is received the authenticate method is called on each mechanism in turn until one of the following occurs: - - A mechanism successfully authenticates the incoming request. - A mechanism attempts but fails to authenticate the request. - The list of mechanisms is exhausted.
This means that if the authenticate method is called on a mechanism it should assume it is required to check if it can actually authenticate the incoming request, anything that would prevent it from performing the check would have already stopped the authenticate method from being called.
Authentication is allowed to proceed if either authentication was required AND one handler authenticated the request or it is allowed to proceed if it is not required AND no handler failed to authenticate the request.
The handleComplete methods are used as the request processing is returning up the chain, primarily these are used to challenge the client to authenticate but where supported by the mechanism they could also be used to send mechanism specific updates back with a request.
If a mechanism successfully authenticated the incoming request then only the handleComplete method on that mechanism is called.
If any mechanism failed or if authentication was required and no mechanism succeeded in authenticating the request then handleComplete will be called for all mechanisms.
Finally if authentication was not required handleComplete will not be called for any of the mechanisms.
The mechanisms will need to double check why handleComplete is being called, if the request was authenticated then they should do nothing unless the mechanism has intermediate state to send back. If the request was not authenticated then a challenge should be sent.
| Modifier and Type | Class and Description |
|---|---|
| public static enum | AuthenticationMechanism.
The AuthenticationOutcome is used by an AuthenticationMechanism to indicate the outcome of the call to authenticate, the overall authentication process will then used this along with the current AuthenticationState to decide how to proceed with the current request. |
| public static class | AuthenticationMechanism.
Simple class to wrap the result of requesting a mechanism sends it's challenge. |
| Modifier and Type | Method and Description |
|---|---|
| public AuthenticationMechanism. | authenticate(final HttpServerExchange
The exchange exchange, final SecurityContext securityContext)Perform authentication of the request. |
| public AuthenticationMechanism. | Returns: AChallengeResult indicating if a challenge was sent and the desired response code.The exchange exchange, final SecurityContext The security context securityContext)Send an authentication challenge to the remote client. |
| authenticate | back to summary |
|---|---|
| public AuthenticationMechanism. Perform authentication of the request. Any potentially blocking work should be performed in the handoff executor provided
| |
| sendChallenge | back to summary |
|---|---|
| public AuthenticationMechanism. Send an authentication challenge to the remote client.
The individual mechanisms should update the response headers and body of the message as appropriate however they should
not set the response code, instead that should be indicated in the
| |
| Modifier and Type | Field and Description |
|---|---|
| public static final AuthenticationMechanism. | AUTHENTICATED
Based on the current request the mechanism has successfully performed authentication. |
| public static final AuthenticationMechanism. | NOT_ATTEMPTED
The mechanism did not attempt authentication on this request, most likely due to not discovering any applicable security tokens for this mechanisms in the request. |
| public static final AuthenticationMechanism. | NOT_AUTHENTICATED
The mechanism attempted authentication but it did not complete, this could either be due to a failure validating the tokens from the client or it could be due to the mechanism requiring at least one additional round trip with the client - either way the request will return challenges to the client. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static AuthenticationMechanism. | |
| public static AuthenticationMechanism. |
| AUTHENTICATED | back to summary |
|---|---|
| public static final AuthenticationMechanism. Based on the current request the mechanism has successfully performed authentication. | |
| NOT_ATTEMPTED | back to summary |
|---|---|
| public static final AuthenticationMechanism. The mechanism did not attempt authentication on this request, most likely due to not discovering any applicable security tokens for this mechanisms in the request. | |
| NOT_AUTHENTICATED | back to summary |
|---|---|
| public static final AuthenticationMechanism. The mechanism attempted authentication but it did not complete, this could either be due to a failure validating the tokens from the client or it could be due to the mechanism requiring at least one additional round trip with the client - either way the request will return challenges to the client. | |
| AuthenticationMechanismOutcome | back to summary |
|---|---|
| private AuthenticationMechanismOutcome() | |
| valueOf | back to summary |
|---|---|
| public static AuthenticationMechanism. | |
| values | back to summary |
|---|---|
| public static AuthenticationMechanism. | |
| Modifier and Type | Field and Description |
|---|---|
| private final boolean | |
| public static final AuthenticationMechanism. | |
| private final Integer |
| Access | Constructor and Description |
|---|---|
| public | |
| public |
| Modifier and Type | Method and Description |
|---|---|
| public Integer | Returns: The desired response code or null if no code specified.Obtain the response code desired by this mechanism for the challenge. |
| public boolean | Returns: true if a challenge was sent, false otherwise.Check if the mechanism did send a challenge. |
| challengeSent | back to summary |
|---|---|
| private final boolean challengeSent | |
| NOT_SENT | back to summary |
|---|---|
| public static final AuthenticationMechanism. | |
| statusCode | back to summary |
|---|---|
| private final Integer statusCode | |
| ChallengeResult | back to summary |
|---|---|
| public ChallengeResult(final boolean challengeSent, final Integer statusCode) | |
| ChallengeResult | back to summary |
|---|---|
| public ChallengeResult(final boolean challengeSent) | |
| getDesiredResponseCode | back to summary |
|---|---|
| public Integer getDesiredResponseCode() Obtain the response code desired by this mechanism for the challenge. Where multiple mechanisms are in use concurrently all of the requested response codes will be checked and the most suitable one selected. If no specific response code is required any value less than 0 can be set.
| |
| isChallengeSent | back to summary |
|---|---|
| public boolean isChallengeSent() Check if the mechanism did send a challenge. Some mechanisms do not send a challenge and just rely on the correct information to authenticate a user being available in the request, in that case it would be normal for the mechanism to set this to false.
| |