c++游戏服务器开发

本篇文章我们来介绍C++高性能服务器的开发

1.用户认证和鉴权

JWT认证

1.前后端token的认证流程:

前端发送登陆请求 – > 后端登陆接口接受 -->后端数据处理后返给前端token –> 前端将token存储后 -->每次请求都带着这问 —>后端设置jwto截器 -->只放ken拦行登陆接口 -->如果前端访问别的接口必须带有token –> 否则被拦个token去访截器拦截 并让前端回复到登陆页面

2、Token的处理方式:

JWT的token当服务端返回以后,是需要客户端进行主动地动作的,并不是像cookie一样,在后边的请求,都会自动带过去。这样就导致了如下几种做法:

将Jwt的token作为cookie返回给客户端。这样后续的请求都会带着这个token过来。这样在拦截的时候,就可以使用了。

将Jwt的token作为返回字符串,先返回给前端,前端再后续请求时,写到anthorization的request的head中,这个做法需要 编程去做,而且通用的做法,都是在ajax当中去做。构造请求。

将Jwt的token作为返回字符串,先返回给前端,前端再后续请求时,将Jwt的token写到token的request的head中,这个做法,也是编程实现,只不过具体做法,也是通过ajax进行。构造请求。只不过是自定义的head。

其实jwt的token也可以作为URL的参数进行传递的,这也是一个方法。

另外,jwt返回给前端的token,一般的做法都是放到localStorage当中,也就是前端浏览器的存储空间当中。可以将token存储在 localstorage里面,需要防止xss攻击

3、例子:

在登陆请求成功后把后端返回数据存储到浏览器

定义request.js 统一处理发送的请求为其加上token ,统一处理响应 若包含统一返回类code为 token未验证成功code 401 则让用户到登陆页面重新登陆

注意:客户端必须主动操作jwt返回的token,这个就不是自动的过程了。

JWT的方案 1、用户去认证中心登录,认证中心生成JWT,返回给客户端。

2、客户端带着jwt,请求其他的多个系统。

3、其他的系统,自己解析jwt,如果能解析,就说明登录成功,就可以继续业务。

通常,这个方案会将用户名等信息放到jwt当中,这样就不用认证中心校验了。

看一下代码示例:

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <openssl/hmac.h>std::string base64_encode(const std::string& input) {const std::string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";std::stringstream result;size_t i = 0;while (i < input.length()) {uint32_t octet_a = i < input.length() ? static_cast<uint8_t>(input[i++]) : 0;uint32_t octet_b = i < input.length() ? static_cast<uint8_t>(input[i++]) : 0;uint32_t octet_c = i < input.length() ? static_cast<uint8_t>(input[i++]) : 0;uint32_t triple = (octet_a << 16) + (octet_b << 8) + octet_c;result << charset[(triple >> 18) & 63]<< charset[(triple >> 12) & 63]<< charset[(triple >> 6) & 63]<< charset[triple & 63];}size_t padding_length = input.length() % 3 == 1 ? 2 : (input.length() % 3 == 2 ? 1 : 0);for (size_t i = 0; i < padding_length; ++i)result.seekp(-1, std::ios_base::end) << '=';return result.str();
}std::string jwt_encode(const std::string& header, const std::string& payload, const std::string& secret_key) {std::stringstream encoded_token;// Encode headerstd::string encoded_header = base64_encode(header);encoded_token << encoded_header << '.';// Encode payloadstd::string encoded_payload = base64_encode(payload);encoded_token << encoded_payload;// Sign token with secret key using HMAC-SHA256 algorithmunsigned char hmac_result[EVP_MAX_MD_SIZE];unsigned int hmac_length;HMAC(EVP_sha256(), secret_key.c_str(), secret_key.length(), reinterpret_cast<const unsigned char*>(encoded_token.str().c_str()), encoded_token.str().length(), hmac_result, &hmac_length);// Append signature to the tokenstd::string signature(hmac_result, hmac_result + (hmac_length > 32 ? 32 : hmac_length));return encoded_token.str() + '.' + base64_encode(signature);
}int main() {std::string header = R"({"alg":"HS256","typ":"JWT"})";std::string payload = R"({"sub":"1234567890","name":"John Doe","iat":1516239022})";std::string secret_key = "your_secret_key_here";std::string jwt_token = jwt_encode(header, payload, secret_key);std::cout << "Generated JWT: " << jwt_token << std::endl;return 0;
}

在实际开发中 需要使用适当的JWT库来处理JWT生成和验证的复杂性。

好了 本篇文章就到这里 在这里我想向大家推荐一个课程:

https://xxetb.xetslk.com/s/2PjJ3T

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:梯度与导数~示例演绎《机器学习·神经网络》的高阶理解

这篇文章确实需要一定的数学基础&#xff0c;第一次接触的小伙伴可以先看一下我示例演绎这个主题的前两篇文章&#xff1a; 示例演绎机器学习中&#xff08;深度学习&#xff09;神经网络的数学基础——快速理解核心概念&#xff08;一&#xff09;&#xff1a; 政安晨&#…

蓝桥杯嵌入式学习记录——按键的使用

目录 一、按键原理简介 二、cubeMX的配置 三、按键的短按代码 四、按键的长按代码 一、按键原理简介 在STM32中&#xff0c;按键连接通常使用GPIO&#xff08;通用输入/输出&#xff09;端口来实现。当按键未被按下时&#xff0c;GPIO端口处于高电平状态&#xff08;即1&am…

springboot188基于spring boot的校园商铺管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

高德地图上绘制热力图的方法

百度地图和高德地图的JavaScript API都提供了热力图的绘制方法&#xff0c;都是将热力图作为新的图层&#xff0c;叠加到地图上。但是百度地图的经纬度体系与我们的经纬度存在偏差&#xff0c;高德的与我们相符&#xff0c;应当使用高德地图JavaScript API。 因为是JavaScript…

COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM&#xff0c;因为它已经过时了。但是我不想再把代码移植到C#上面&#xff0c;然后用VSTO——已经用了std::unordered_set&#xff01;因为我使用了Copilot&#xff0c;结合我的思考&#xff0c;写了下面的代码&#xff1a; #impor…

【Langchain Agent研究】SalesGPT项目介绍(四)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;三&#xff09;-CSDN博客 github地址&#xff1a;GitHub - jerry1900/SalesGPT: Context-aware AI Sales Agent to automate sales outreach. 上节课&#xff0c;我们主要介绍了SalesGPT的类属性和它最重要的类方法f…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求&#xff1a; 去年12月&#xff0c;我去了其他幼儿园参观&#xff0c;这是一个传统文化德育教育特色的学校&#xff0c;在“古典集市”展示活动中&#xff0c;小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令&#xff0c;基于master分支在本地创建tabBar子分支&#x…

蓝桥杯刷题--python-5

0天干地支 - 蓝桥云课 (lanqiao.cn) import os import sys # 请在此输入您的代码 I1=[jia,yi,bing,ding,wu,ji,geng,xin,ren,gui] I2=[zi,chou,yin,mao,chen,si,wu,wei,shen,you,xu,hai] n=int(input()) n_=n-1900 n_=n_%60 i1=(n_+6)%10 i2=(n_) %12 print(.join(I1[i1]+I2[i2…

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port)执行队列中的任务 &#xff1a; AbstractUnsafe#register0注册 doRegister() 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketCh…

Vue2源码梳理:关于vm.$mount的实现

$mount vue实例挂载的实现&#xff0c;也就是执行 vm.$mount 的方法 在 Runtime Compiler 版本&#xff0c;入口文件是: src/platform/web/entry-runtime-with-compiler.js $mount 方法也是在这个文件中被定义的 const mount Vue.prototype.$mount Vue.prototype.$mount f…

acszcda

学习目标&#xff1a; 提示&#xff1a;这里可以添加学习目标 例如&#xff1a; 一周掌握 Java 入门知识 学习内容&#xff1a; 提示&#xff1a;这里可以添加要学的内容 例如&#xff1a; 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#x…

C# 使用Naudio库实现声卡采集麦克风采集+混音

C# 使用Naudio库实现声卡采集麦克风采集混音 using NAudio.Wave; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threadin…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN&#xff08;同步&#xff09;报文段给服务器&#xff0c;选择一个初始序列号&#xff0c;并设置SYN标志位为1。服务器接收到客户端的SYN报文段后&#xff0c;回复一个ACK&#xff08…

OJ刷题:杨氏矩阵【建议收藏】

看见这个题目&#xff0c;很多人的第一反应是遍历整个数组查找数字&#xff0c;但是这种方法不仅效率低&#xff0c;而且远远不能满足题目要求。下面介绍一种高效的查找方法&#xff1a; 代码实现&#xff1a; #include <stdio.h>int Yang_Find_Num(int arr[][3], int …

steam游戏搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…

K8sGPT 的使用

K8sGPT 介绍 k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器中&#xff0c;并帮助提取最相关的信息&#xff0c;通过人工智能来丰富它。它还可以与 OpenAI、Azure、Cohere、Amazon Bedrock 和本地模型结合使用。 K8sGPT Github 地址 …

C++Linux网络编程:简单的select模型运用

文章目录 前言源代码部分重点解读read/write与recv/send在使用上的差异 前言 这段代码来自于游双的《Linux高性能服务器编程》&#xff0c;在Ubuntu中对代码进行了实现&#xff0c;并在注释部分加上了我的个人解读。 源代码 // #include <sys/types.h> // 网络通讯的核…

JavaScript 设计模式之代理模式

代理模式 其实这种模式在现在很多地方也都有使用到&#xff0c;如 Vue3 中的数据相应原理就是使用的 es6 中的 Proxy 代理及 Reflect 反射的方式来处理数据响应式 我们日常在使用数据请求时&#xff0c;也会用到一些代理的方式&#xff0c;比如在请求不同的域名&#xff0c;端…

C++ 广度优先搜索的标记策略(五十六)【第三篇】

今天我们来看看bfs是如何规划标记策略的。 1.标记策略 但先等一下&#xff0c;先看一道题《一维坐标的移动》 在一个长度为 n 的坐标轴上&#xff0c;蒜头君想从 A 点 移动到 B 点。他的移动规则如下&#xff1a; 向前一步&#xff0c;坐标增加 1。 向后一步&#xff0c;坐…