spring-projects / spring-security

Spring Security
http://spring.io/projects/spring-security
Apache License 2.0
8.71k stars 5.85k forks source link

No Encoder for BearerTokenMetadata in Spring Security RSocket #7508

Closed shazin closed 2 years ago

shazin commented 4 years ago

No Encoder for BearerTokenMetadata in Spring Security RSocket

When using JWT with Bearer Token, Sending the JWT Token from Requester to Responder fails because there is no Encoder for BearerTokenMetadata (MimeType.BEARER_AUTHENTICATION_MIME_TYPE).

Actual Behavior

No Encoder for this type of Authentication

Expected Behavior

Must have an Encoder

Version

5.2.0.RC1

Sample

Must have an Encoder similar to following.

` public class BearerTokenEncoder extends AbstractEncoder {

public BearerTokenEncoder() {
    super(BearerTokenMetadata.BEARER_AUTHENTICATION_MIME_TYPE);
}

@Override
public Flux<DataBuffer> encode(Publisher<? extends BearerTokenMetadata> publisher, DataBufferFactory dataBufferFactory, ResolvableType resolvableType, MimeType mimeType, Map<String, Object> hints) {
    return Flux.from(publisher).map((credentials) -> {
        return this.encodeValue(credentials, dataBufferFactory, resolvableType, mimeType, hints);
    });
}

@Override
public DataBuffer encodeValue(BearerTokenMetadata credentials, DataBufferFactory bufferFactory, ResolvableType valueType, MimeType mimeType, Map<String, Object> hints) {
    String token = credentials.getToken();
    byte[] tokenBytes = token.getBytes(StandardCharsets.UTF_8);
    DataBuffer metadata = bufferFactory.allocateBuffer();
    boolean release = true;

    DataBuffer dataBuffer;
    try {
        metadata.write(tokenBytes);
        release = false;
        dataBuffer = metadata;
    } finally {
        if (release) {
            DataBufferUtils.release(metadata);
        }
    }

    return dataBuffer;
}

} `

jzheaux commented 2 years ago

message/x.rsocket.authentication.bearer.v0 didn't make it into the spec so is now deprecated. Please use message/x.rsocket.authentication.v0 instead.