mirror of https://github.com/alibaba/nacos.git
Add a2a api auth resource parser. (#13826)
This commit is contained in:
parent
4ddbc4317c
commit
f1af11a50f
|
@ -21,6 +21,7 @@ import com.alibaba.nacos.auth.annotation.Secured;
|
|||
import com.alibaba.nacos.auth.config.NacosAuthConfig;
|
||||
import com.alibaba.nacos.auth.context.GrpcIdentityContextBuilder;
|
||||
import com.alibaba.nacos.auth.parser.grpc.AbstractGrpcResourceParser;
|
||||
import com.alibaba.nacos.auth.parser.grpc.AiGrpcResourceParser;
|
||||
import com.alibaba.nacos.auth.parser.grpc.ConfigGrpcResourceParser;
|
||||
import com.alibaba.nacos.auth.parser.grpc.NamingGrpcResourceParser;
|
||||
import com.alibaba.nacos.auth.serveridentity.ServerIdentity;
|
||||
|
@ -57,6 +58,7 @@ public class GrpcProtocolAuthService extends AbstractProtocolAuthService<Request
|
|||
super.initialize();
|
||||
resourceParserMap.put(SignType.NAMING, new NamingGrpcResourceParser());
|
||||
resourceParserMap.put(SignType.CONFIG, new ConfigGrpcResourceParser());
|
||||
resourceParserMap.put(SignType.AI, new AiGrpcResourceParser());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright 1999-2025 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed 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 com.alibaba.nacos.auth.parser.grpc;
|
||||
|
||||
import com.alibaba.nacos.api.ai.remote.request.AbstractAgentRequest;
|
||||
import com.alibaba.nacos.api.ai.remote.request.AbstractMcpRequest;
|
||||
import com.alibaba.nacos.api.ai.remote.request.ReleaseAgentCardRequest;
|
||||
import com.alibaba.nacos.api.ai.remote.request.ReleaseMcpServerRequest;
|
||||
import com.alibaba.nacos.api.remote.request.Request;
|
||||
import com.alibaba.nacos.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* Ai Grpc resource parser.
|
||||
*
|
||||
* @author xiweng.yy
|
||||
*/
|
||||
public class AiGrpcResourceParser extends AbstractGrpcResourceParser {
|
||||
|
||||
@Override
|
||||
protected String getNamespaceId(Request request) {
|
||||
if (request instanceof AbstractMcpRequest) {
|
||||
return ((AbstractMcpRequest) request).getNamespaceId();
|
||||
} else if (request instanceof AbstractAgentRequest) {
|
||||
return ((AbstractAgentRequest) request).getNamespaceId();
|
||||
}
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getGroup(Request request) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getResourceName(Request request) {
|
||||
if (request instanceof AbstractMcpRequest) {
|
||||
return getMcpName((AbstractMcpRequest) request);
|
||||
} else if (request instanceof AbstractAgentRequest) {
|
||||
return getAgentName((AbstractAgentRequest) request);
|
||||
}
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
private String getMcpName(AbstractMcpRequest request) {
|
||||
String mcpName = request.getMcpName();
|
||||
if (request instanceof ReleaseMcpServerRequest) {
|
||||
ReleaseMcpServerRequest releaseMcpServerRequest = (ReleaseMcpServerRequest) request;
|
||||
if (null != releaseMcpServerRequest.getServerSpecification()) {
|
||||
mcpName = releaseMcpServerRequest.getServerSpecification().getName();
|
||||
}
|
||||
}
|
||||
return StringUtils.isBlank(mcpName) ? StringUtils.EMPTY : mcpName;
|
||||
}
|
||||
|
||||
private String getAgentName(AbstractAgentRequest request) {
|
||||
String agentName = request.getAgentName();
|
||||
if (request instanceof ReleaseAgentCardRequest) {
|
||||
ReleaseAgentCardRequest releaseAgentCardRequest = (ReleaseAgentCardRequest) request;
|
||||
if (null != releaseAgentCardRequest.getAgentCard()) {
|
||||
agentName = releaseAgentCardRequest.getAgentCard().getName();
|
||||
}
|
||||
}
|
||||
return StringUtils.isBlank(agentName) ? StringUtils.EMPTY : agentName;
|
||||
}
|
||||
}
|
|
@ -17,7 +17,9 @@
|
|||
package com.alibaba.nacos.auth.parser.http;
|
||||
|
||||
import com.alibaba.nacos.api.ai.constant.AiConstants;
|
||||
import com.alibaba.nacos.api.ai.model.a2a.AgentCard;
|
||||
import com.alibaba.nacos.api.common.Constants;
|
||||
import com.alibaba.nacos.common.utils.JacksonUtils;
|
||||
import com.alibaba.nacos.common.utils.StringUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
|
@ -30,6 +32,12 @@ import java.util.Properties;
|
|||
*/
|
||||
public class AiHttpResourceParser extends AbstractHttpResourceParser {
|
||||
|
||||
public static final String MCP_PATH = "/ai/mcp";
|
||||
|
||||
public static final String A2A_PATH = "/ai/a2a";
|
||||
|
||||
private static final String AGENT_CARD_PARAM = "agentCard";
|
||||
|
||||
@Override
|
||||
protected String getNamespaceId(HttpServletRequest request) {
|
||||
String namespaceId = request.getParameter(Constants.NAMESPACE_ID);
|
||||
|
@ -46,10 +54,37 @@ public class AiHttpResourceParser extends AbstractHttpResourceParser {
|
|||
|
||||
@Override
|
||||
protected String getResourceName(HttpServletRequest request) {
|
||||
String url = request.getRequestURI();
|
||||
if (url.contains(MCP_PATH)) {
|
||||
return getMcpName(request);
|
||||
} else if (url.contains(A2A_PATH)) {
|
||||
return getAgentName(request);
|
||||
}
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
private String getMcpName(HttpServletRequest request) {
|
||||
String mcpName = request.getParameter("mcpName");
|
||||
return StringUtils.isBlank(mcpName) ? StringUtils.EMPTY : mcpName;
|
||||
}
|
||||
|
||||
private String getAgentName(HttpServletRequest request) {
|
||||
String agentName = request.getParameter("agentName");
|
||||
if (request.getParameterMap().containsKey(AGENT_CARD_PARAM)) {
|
||||
agentName = deserializeAndGetAgentName(request.getParameter(AGENT_CARD_PARAM));
|
||||
}
|
||||
return StringUtils.isBlank(agentName) ? StringUtils.EMPTY : agentName;
|
||||
}
|
||||
|
||||
private String deserializeAndGetAgentName(String agentCardJson) {
|
||||
try {
|
||||
AgentCard agentCard = JacksonUtils.toObj(agentCardJson, AgentCard.class);
|
||||
return agentCard.getName();
|
||||
} catch (Exception ignored) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Properties getProperties(HttpServletRequest request) {
|
||||
return new Properties();
|
||||
|
|
Loading…
Reference in New Issue