微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Micronaut 配置不发出 JWT 刷新令牌

如何解决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 举报,一经查实,本站将立刻删除。