Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 36f1de9

Browse files
committed
Add OneTimeTokenAuthentication
Closes gh-17799
1 parent 6663eea commit 36f1de9

File tree

6 files changed

+77
-5
lines changed

6 files changed

+77
-5
lines changed

‎config/src/test/java/org/springframework/security/SerializationSamples.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
import org.springframework.security.authentication.jaas.event.JaasAuthenticationSuccessEvent;
7979
import org.springframework.security.authentication.ott.DefaultOneTimeToken;
8080
import org.springframework.security.authentication.ott.InvalidOneTimeTokenException;
81+
import org.springframework.security.authentication.ott.OneTimeTokenAuthentication;
8182
import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken;
8283
import org.springframework.security.authentication.password.CompromisedPasswordException;
8384
import org.springframework.security.authorization.AuthorityAuthorizationDecision;
@@ -400,6 +401,8 @@ final class SerializationSamples {
400401
});
401402
generatorByClassName.put(OneTimeTokenAuthenticationToken.class,
402403
(r) -> applyDetails(new OneTimeTokenAuthenticationToken("username", "token")));
404+
generatorByClassName.put(OneTimeTokenAuthentication.class,
405+
(r) -> applyDetails(new OneTimeTokenAuthentication("username", authentication.getAuthorities())));
403406
generatorByClassName.put(AccessDeniedException.class,
404407
(r) -> new AccessDeniedException("access denied", new RuntimeException()));
405408
generatorByClassName.put(AuthorizationServiceException.class,
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2004-present the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.security.authentication.ott;
18+
19+
import java.io.Serial;
20+
import java.util.Collection;
21+
22+
import org.jspecify.annotations.Nullable;
23+
24+
import org.springframework.security.authentication.AbstractAuthenticationToken;
25+
import org.springframework.security.core.GrantedAuthority;
26+
27+
/**
28+
* The result of a successful one-time-token authentication
29+
*
30+
* @author Josh Cummings
31+
* @since 7.0
32+
*/
33+
public class OneTimeTokenAuthentication extends AbstractAuthenticationToken {
34+
35+
@Serial
36+
private static final long serialVersionUID = 1195893764725073959L;
37+
38+
private final Object principal;
39+
40+
public OneTimeTokenAuthentication(Object principal, Collection<? extends GrantedAuthority> authorities) {
41+
super(authorities);
42+
this.principal = principal;
43+
setAuthenticated(true);
44+
}
45+
46+
@Override
47+
public Object getPrincipal() {
48+
return this.principal;
49+
}
50+
51+
@Override
52+
public @Nullable Object getCredentials() {
53+
return null;
54+
}
55+
56+
}

‎core/src/main/java/org/springframework/security/authentication/ott/OneTimeTokenAuthenticationProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ public Authentication authenticate(Authentication authentication) throws Authent
5656
}
5757
try {
5858
UserDetails user = this.userDetailsService.loadUserByUsername(consumed.getUsername());
59-
OneTimeTokenAuthenticationToken authenticated = OneTimeTokenAuthenticationToken.authenticated(user,
60-
user.getAuthorities());
59+
OneTimeTokenAuthentication authenticated = new OneTimeTokenAuthentication(user, user.getAuthorities());
6160
authenticated.setDetails(otpAuthenticationToken.getDetails());
6261
return authenticated;
6362
}

‎core/src/main/java/org/springframework/security/authentication/ott/OneTimeTokenAuthenticationToken.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public class OneTimeTokenAuthenticationToken extends AbstractAuthenticationToken
4040

4141
private @Nullable String tokenValue;
4242

43+
/**
44+
* @deprecated Please use constructor that takes a {@link String} instead
45+
*/
46+
@Deprecated(forRemoval = true, since = "7.0")
4347
public OneTimeTokenAuthenticationToken(@Nullable Object principal, String tokenValue) {
4448
super(Collections.emptyList());
4549
this.tokenValue = tokenValue;
@@ -50,6 +54,10 @@ public OneTimeTokenAuthenticationToken(String tokenValue) {
5054
this(null, tokenValue);
5155
}
5256

57+
/**
58+
* @deprecated Please use {@link OneTimeTokenAuthentication} instead
59+
*/
60+
@Deprecated(forRemoval = true, since = "7.0")
5361
public OneTimeTokenAuthenticationToken(Object principal, Collection<? extends GrantedAuthority> authorities) {
5462
super(authorities);
5563
this.principal = principal;
@@ -60,7 +68,9 @@ public OneTimeTokenAuthenticationToken(Object principal, Collection<? extends Gr
6068
* Creates an unauthenticated token
6169
* @param tokenValue the one-time token value
6270
* @return an unauthenticated {@link OneTimeTokenAuthenticationToken}
71+
* @deprecated Please use constructor that takes a {@link String} instead
6372
*/
73+
@Deprecated(forRemoval = true, since = "7.0")
6474
public static OneTimeTokenAuthenticationToken unauthenticated(String tokenValue) {
6575
return new OneTimeTokenAuthenticationToken(null, tokenValue);
6676
}
@@ -70,7 +80,9 @@ public static OneTimeTokenAuthenticationToken unauthenticated(String tokenValue)
7080
* @param principal the principal
7181
* @param tokenValue the one-time token value
7282
* @return an unauthenticated {@link OneTimeTokenAuthenticationToken}
83+
* @deprecated Please use constructor that takes a {@link String} instead
7384
*/
85+
@Deprecated(forRemoval = true, since = "7.0")
7486
public static OneTimeTokenAuthenticationToken unauthenticated(Object principal, String tokenValue) {
7587
return new OneTimeTokenAuthenticationToken(principal, tokenValue);
7688
}
@@ -80,7 +92,9 @@ public static OneTimeTokenAuthenticationToken unauthenticated(Object principal,
8092
* @param principal the principal
8193
* @param authorities the principal authorities
8294
* @return an authenticated {@link OneTimeTokenAuthenticationToken}
95+
* @deprecated Please use {@link OneTimeTokenAuthentication} instead
8396
*/
97+
@Deprecated(forRemoval = true, since = "7.0")
8498
public static OneTimeTokenAuthenticationToken authenticated(Object principal,
8599
Collection<? extends GrantedAuthority> authorities) {
86100
return new OneTimeTokenAuthenticationToken(principal, authorities);

‎core/src/main/java/org/springframework/security/authentication/ott/reactive/OneTimeTokenReactiveAuthenticationManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.springframework.security.authentication.ReactiveAuthenticationManager;
2424
import org.springframework.security.authentication.ott.InvalidOneTimeTokenException;
25+
import org.springframework.security.authentication.ott.OneTimeTokenAuthentication;
2526
import org.springframework.security.authentication.ott.OneTimeTokenAuthenticationToken;
2627
import org.springframework.security.core.Authentication;
2728
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
@@ -59,10 +60,9 @@ public Mono<Authentication> authenticate(Authentication authentication) {
5960
.map(onSuccess(otpAuthenticationToken));
6061
}
6162

62-
private Function<UserDetails, OneTimeTokenAuthenticationToken> onSuccess(OneTimeTokenAuthenticationToken token) {
63+
private Function<UserDetails, OneTimeTokenAuthentication> onSuccess(OneTimeTokenAuthenticationToken token) {
6364
return (user) -> {
64-
OneTimeTokenAuthenticationToken authenticated = OneTimeTokenAuthenticationToken.authenticated(user,
65-
user.getAuthorities());
65+
OneTimeTokenAuthentication authenticated = new OneTimeTokenAuthentication(user, user.getAuthorities());
6666
authenticated.setDetails(token.getDetails());
6767
return authenticated;
6868
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /