阿里api网关接口创建、发布、授权、调试

版权声明:本文为CSDN博主 无、涯 原创文章,可以转载但请注明出处。联系方式:[email protected] 博客地址 https://blog.csdn.net/a704397849 https://blog.csdn.net/a704397849/article/details/89421342

阿里api网关接口创建、发布、授权、调试

下面会出现关于签名认证和阿里云api认证的概念以及认证方式的选择,如果这些还不是很清楚的可以看下我的上篇文章:
《阿里云api网关的认证方式介绍以及选择》https://blog.csdn.net/a704397849/article/details/89413904

本篇会介绍创建3个典型接口:
app用户账号密码登录 ,认证方式: OpenID Connect(模式:获取授权api) & 阿里云APP
app用户查询用户信息 ,认证方式: OpenID Connect(模式:业务api) & 阿里云APP
设备(如:智能故事机)获取播放的资源 ,认证方式: 阿里云APP

1 进入api网关控制台

​image.png​

2 选择服务器所在地区

在这里插入图片描述

3 创建应用 ‘api网关_el_test’

在这里插入图片描述

4 如果要创建的api网关接口还没有所属分组,创建分组 ‘test’

在这里插入图片描述

5 创建api网关接口

在这里插入图片描述

下面创建3个典型的案例api网关接口 APP用户账号密码登录接口、APP

  • 1 创建APP客户端登录接口 (如果安全认证不知道怎么选择,看文章头介绍的文章)

​image.png​

最后会附上 服务器后端生成KeyId,公钥、私钥的代码.

在这里插入图片描述

​image.png​
在这里插入图片描述

注:入参请求模式, 入参映射与入参透传的区别:入参映射需要你根据实际API需要参数,逐一录入API网关,通过映射关系,可以将参数映射到服务端上,一般情况下,比如我们请求的时候放在Query中,服务端也去Query中拿值,通过入参映射,我们可以实现请求的时候参数放在Header中,阿里API网关在转发到我们服务端的时候可以帮我们转发到Query中。入参映射可以实现阿里网关层的参数合法性校验(网关会参照校验规则对请求做初步校验,如果入参不合法 ,则不会到达您的后端服务,大大的降低了后端服务的压力),因为我们可以在每个参数后面“编辑更多”中指定参数的限制规则,比如长度限制、验证正则表达式等。入参透传的话不需要我们定义参数,阿里网关在收到我们请求的时候直接转发给我们的服务端。我们一般使用入参映射,因为这样对于我们的API需要的参数一目了然,而且以后如要加什么参数限制规则,也是很方便的。

摘自: https://www.jianshu.com/p/f04f5bd8f84b

关于请求body 非Form表单 模型,不是本文重点,这里没有介绍

官方文档: https://help.aliyun.com/document_detail/106633.html

  • 2 创建 app用户查询用户信息 接口
    在这里插入图片描述

​image.png​
在这里插入图片描述
在这里插入图片描述

  • 3 创建 设备(如:智能故事机)获取播放的资源 接口
    ​image.png​
    在这里插入图片描述

​image.png​
在这里插入图片描述

6 api网关接口发布

​image.png​
在这里插入图片描述
为刚才创建的3个接口都按上面操作发布 ‘测试’ 完成 后
​image.png​

7 api网关接口授权给指定应用

​image.png​

​image.png​

为刚才创建的3个接口都按上面操作 给 应用 “api网关_el_test” 授权。

8 调试

​image.png​

​image.png​

​image.png​

​image.png​

​image.png​

附, 服务器后端生成KeyId,公钥、私钥的代码 。

阿里云api网关 token 认证采用的是jws( jws 是jwt的一种实现).

import org.jose4j.json.JsonUtil;
import org.jose4j.jwk.RsaJsonWebKey;
import org.jose4j.jwk.RsaJwkGenerator;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
import org.jose4j.lang.JoseException;

import java.security.PrivateKey;
import java.util.UUID;

/**
 * 认证服务器,负责生成 id_Token 并管理公钥私钥对
 * 参考:https://help.aliyun.com/document_detail/48019.html?spm=a2c4g.11186623.6.592.386b7355mw0rwJ
 * @author
 */
public class AsServer {

    /**
     *   keyId,公钥,私钥 都是用 createKeyPair 方法生成
     */
    private static String keyId = "0341a11b5887449a92d1c587c2d44731";
    private static String privateKeyStr = "...";//这里没贴出来,自己去生成自己的 KeyPair 吧

    public static String createIdToken(String userId){
        try {
            //Claims
            JwtClaims claims = new JwtClaims();
            claims.setGeneratedJwtId();
            claims.setIssuedAtToNow();
            //expire time
            NumericDate date = NumericDate.now();
            date.addSeconds(60*60*24);
            claims.setExpirationTime(date);
            claims.setNotBeforeMinutesInThePast(1);
            claims.setSubject("YOUR_SUBJECT");
            claims.setAudience("YOUR_AUDIENCE");
            //添加自定义参数,必须是字符串类型
            claims.setClaim("userId", userId);

            //jws
            JsonWebSignature jws = new JsonWebSignature();
            jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
            jws.setKeyIdHeaderValue(keyId);
            jws.setPayload(claims.toJson());
            PrivateKey privateKey = new RsaJsonWebKey(JsonUtil.parseJson(privateKeyStr)).getPrivateKey();
            jws.setKey(privateKey);

            //get token
            String idToken = jws.getCompactSerialization();
            return idToken;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void createKeyPair(){
        String keyId = UUID.randomUUID().toString().replaceAll("-", "");
        RsaJsonWebKey jwk = null;
        try {
            jwk = RsaJwkGenerator.generateJwk(2048);
        } catch (JoseException e) {
            e.printStackTrace();
        }
        jwk.setKeyId(keyId);
        jwk.setAlgorithm(AlgorithmIdentifiers.ECDSA_USING_P256_CURVE_AND_SHA256);
        String publicKey = jwk.toJson(RsaJsonWebKey.OutputControlLevel.PUBLIC_ONLY);
        String privateKey = jwk.toJson(RsaJsonWebKey.OutputControlLevel.INCLUDE_PRIVATE);

        System.out.println("keyId="+keyId);
        System.out.println();
        System.out.println("公钥 publicKeyStr="+publicKey);
        System.out.println();
        System.out.println("私钥 privateKeyStr="+privateKey);
    }
}

用到的jws jar包, 链接:https://pan.baidu.com/s/19Spp1wBNxFJt6qPvCkg-WA
提取码:96rq

最后,本篇文章只是简单介绍了api网关接口的创建、发布、授权、调试,有些功能操作没有使用,更多参考阿里云官方文档

下篇文章介绍 客户端 访问 api网关接口 demo, 精简 java demo 源码 ,其他语言也可以参考实现。
地址:https://blog.csdn.net/a704397849/article/details/89455262

猜你喜欢

转载自blog.csdn.net/a704397849/article/details/89421342