kafka SerializedJwt 源码

  • 2022-10-20
  • 浏览 (433)

kafka SerializedJwt 代码

文件路径:/clients/src/main/java/org/apache/kafka/common/security/oauthbearer/internals/secured/SerializedJwt.java

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.kafka.common.security.oauthbearer.internals.secured;

/**
 * SerializedJwt provides a modicum of structure and validation around a JWT's serialized form by
 * splitting and making the three sections (header, payload, and signature) available to the user.
 */

public class SerializedJwt {

    private final String token;

    private final String header;

    private final String payload;

    private final String signature;

    public SerializedJwt(String token) {
        if (token == null)
            token = "";
        else
            token = token.trim();

        if (token.isEmpty())
            throw new ValidateException("Empty JWT provided; expected three sections (header, payload, and signature)");

        String[] splits = token.split("\\.");

        if (splits.length != 3)
            throw new ValidateException(String.format("Malformed JWT provided (%s); expected three sections (header, payload, and signature), but %s sections provided",
                token, splits.length));

        this.token = token.trim();
        this.header = validateSection(splits[0], "header");
        this.payload = validateSection(splits[1], "payload");
        this.signature = validateSection(splits[2], "signature");
    }

    /**
     * Returns the entire base 64-encoded JWT.
     *
     * @return JWT
     */

    public String getToken() {
        return token;
    }

    /**
     * Returns the first section--the JWT header--in its base 64-encoded form.
     *
     * @return Header section of the JWT
     */

    public String getHeader() {
        return header;
    }

    /**
     * Returns the second section--the JWT payload--in its base 64-encoded form.
     *
     * @return Payload section of the JWT
     */

    public String getPayload() {
        return payload;
    }

    /**
     * Returns the third section--the JWT signature--in its base 64-encoded form.
     *
     * @return Signature section of the JWT
     */

    public String getSignature() {
        return signature;
    }

    private String validateSection(String section, String sectionName) throws ValidateException {
        section = section.trim();

        if (section.isEmpty())
            throw new ValidateException(String.format(
                "Malformed JWT provided; expected at least three sections (header, payload, and signature), but %s section missing",
                sectionName));

        return section;
    }

}

相关信息

kafka 源码目录

相关文章

kafka AccessTokenRetriever 源码

kafka AccessTokenRetrieverFactory 源码

kafka AccessTokenValidator 源码

kafka AccessTokenValidatorFactory 源码

kafka BasicOAuthBearerToken 源码

kafka ClaimValidationUtils 源码

kafka CloseableVerificationKeyResolver 源码

kafka ConfigurationUtils 源码

kafka FileTokenRetriever 源码

kafka HttpAccessTokenRetriever 源码

0  赞