企业服务端接口认证案例

接口认证方式

  调用方要向管理员获取 appkey 和 secret。

  appkey:调用方唯一标识,方便 HTTP-API 统计与维护;

  secret:密钥,用于生成 HTTP-API 校验所需的 token 值;

  调用方每次请求都需要带上当前时间戳参数 time,这里的时间戳指 UTC时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 1970 年 01 月 01 日 08 时 00 分 00 秒)起至现在的总毫秒数。

  调用方遵照 HTTP-API 约定规则生成 token,并作为接口调用的请求参数传入服务端进行校验。

生成 token 值

  Token值是将请求源串以及Secret通过MD5算法生成的,用来提高传输过程参数的防篡改性。

  token值的生成共有2个步骤:构造源串生成token。详见下面的描述。

  Step1.构造源串

    a.获取要请求URI(统一资源标识符,即域名后面的地址串,示例:/openapi/service/vss/preview/getPreviewParamByCameraUuid);

    b.将输入参数(系统参数和业务参数)生成JSON串;

    c.将a中URI和b中得到的字符串和secrect拼接起来得到源串。

  请求参数:

{

    "appkey": "61fdb13b", 

    "time": 1479364577369, 

    "opUserUuid": "43a9a55f76474bde89ecabc1d6914a7f", 

    "cameraUuid": "b785bcf358154a4594651b4b21ddd0af", 

    "netZoneUuid": "11d0e493870d40f9b2589383cf73001f"

}

  请求参数生成 JSON 串:

{"appkey":"24982ba6","time":1479364577369,"opUserUuid":"43a9a55f76474bde89ecabc1d6914a7f","cameraUuid":"b785bcf358154a4594651b4b21ddd0af","netZoneUuid":"11d0e493870d40f9b2589383cf73001f"} 

  将前两步中得到的字符串和secrect拼接起来得到源串(请求URI+参数串+secret

/openapi/service/vss/preview/getPreviewParamByCameraUuid{"appkey":"24982ba6","time":1479364577369,"opUserUuid":"43a9a55f76474bde89ecabc1d6914a7f","cameraUuid":"b785bcf358154a4594651b4b21ddd0af","netZoneUuid":"11d0e493870d40f9b2589383cf73001f"}aa7aa8a8fa604c60866413f52563b70c

  Step2.生成token

  使用MD5算法对Step1中得到的源串进行运算,得到token值(大写):

MD5(/openapi/service/vss/preview/getPreviewParamByCameraUuid{"appkey":"24982ba6","time":1479364577369, "opUserUuid":"43a9a55f76474bde89ecabc1d6914a7f","cameraUuid":"b785bcf358154a4594651b4b21ddd0af","netZoneUuid":"11d0e493870d40f9b2589383cf73001f"}aa7aa8a8fa604c60866413f52563b70c)

  token值:5067D805D98456393A1C5DFE849B883B

  注:

    1.生成token的请求参数顺序与请求URL中的参数顺序保持一致

    2.每次请求都重新生成token值

    3.token值为32位长度的大写字符串

发起请求

  Step1.token参数和值拼接到POST请求URL后面

http://IP:PORT/openapi/service/base/user/getPreviewParamByCameraUuid?token=5067D805D98456393A1C5DFE849B883B

  Step2.发起请求

  ajax 填写参数:

{

    "appkey": "61fdb13b", 

    "time": 1479364577369, 

    "opUserUuid": "43a9a55f76474bde89ecabc1d6914a7f", 

    "cameraUuid": "b785bcf358154a4594651b4b21ddd0af", 

    "netZoneUuid": "11d0e493870d40f9b2589383cf73001f"

}

 

转载于:https://www.cnblogs.com/yuqlblog/p/9167593.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个基于 Django 和 Django REST framework 的 JWT 认证的示例。首先需要安装 `djangorestframework-simplejwt` 包。 安装命令: ``` pip install djangorestframework-simplejwt ``` 安装完成后,在 `settings.py` 中添加以下配置: ```python REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_simplejwt.authentication.JWTAuthentication', ], } ``` 接下来,创建一个获取 JWT Token 的视图: ```python from rest_framework_simplejwt.views import TokenObtainPairView class ObtainTokenPairView(TokenObtainPairView): serializer_class = MyTokenObtainPairSerializer ``` 这里我们自定义了一个 `MyTokenObtainPairSerializer`,用于在 JWT Token 中添加一些自定义的信息。该类继承自 `TokenObtainPairSerializer`。 ```python from rest_framework_simplejwt.serializers import TokenObtainPairSerializer class MyTokenObtainPairSerializer(TokenObtainPairSerializer): @classmethod def get_token(cls, user): token = super().get_token(user) # Add custom claims token['username'] = user.username token['email'] = user.email return token ``` 在 `urls.py` 中添加路由: ```python from django.urls import path from .views import ObtainTokenPairView urlpatterns = [ path('api/token/', ObtainTokenPairView.as_view(), name='token_obtain_pair'), ] ``` 现在,我们就可以通过访问 `/api/token/` 接口来获取 JWT Token 了。该接口接收 `username` 和 `password` 两个参数。 接收到 Token 后,我们可以在请求头中添加 `Authorization` 字段,将 Token 作为值传递给服务端服务端会通过 JWT 认证,根据 Token 中的信息来识别用户身份。例如: ``` Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsImV4cCI6MTYzNzQ1MDE0OCwianRpIjoiNzRkNGI5MDItMzYzZS00MGYzLWJjMDQtMjQxZTJlNTFkZDZiIn0.64cJZuVzRq_V3f3cddtb3K4JjjxZ1a3sPvzv8R0fP8g ``` 服务端可以通过如下代码读取 Token 中的信息: ```python from rest_framework_simplejwt.authentication import JWTAuthentication class MyView(APIView): authentication_classes = [JWTAuthentication] def get(self, request): user = request.user # access user info from user variable ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值