如何解决Micronaut 配置不发出 JWT 刷新令牌
我的 application.yml
中有以下配置。根据规范,除了 JWT
响应中的访问令牌之外,这还应发出刷新令牌,但我只得到访问令牌而不是刷新令牌。
我错过了什么吗?
token:
jwt:
signatures:
secret:
generator:
refresh-token:
secret: "${JWT_GENERATOR_SIGNATURE_SECRET:pleaseChangeThisSecretForANewOne}"
secret: "${JWT_GENERATOR_SIGNATURE_SECRET:pleaseChangeThisSecretForANewOne}"
解决方法
您可能缺少 RefreshTokenPersistence
的实现。
我建议您阅读 micronaut 安全文档的这一部分:https://micronaut-projects.github.io/micronaut-security/latest/guide/#refresh
这是持久化单元的一个非常非常幼稚的实现。请不要忘记将 @Singleton
添加到您的实现中。我正是错过了这一点,这就是为什么 micronaut 一开始在我自己的项目中没有生成刷新令牌的原因。
import io.micronaut.security.authentication.UserDetails;
import io.micronaut.security.token.event.RefreshTokenGeneratedEvent;
import io.micronaut.security.token.refresh.RefreshTokenPersistence;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import org.reactivestreams.Publisher;
import javax.inject.Singleton;
import java.util.HashMap;
import java.util.Map;
@Singleton
public class MyRefreshTokenPersistence implements RefreshTokenPersistence {
private final Map<String,UserDetails> storage = new HashMap<>();
@Override
public void persistToken(RefreshTokenGeneratedEvent event) {
storage.put(event.getRefreshToken(),event.getUserDetails());
}
@Override
public Publisher<UserDetails> getUserDetails(String refreshToken) {
return Flowable.create(emitter -> {
final UserDetails userDetails = storage.get(refreshToken);
if ( userDetails != null ) {
emitter.onNext(userDetails);
emitter.onComplete();
} else {
emitter.onError(new IllegalArgumentException("refresh token unknown"));
}
},BackpressureStrategy.BUFFER);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。