【Go微服务安全通信】:基于OIDC的单点登录落地实施方案

如何通过 OIDC 协议实现单点登录? 什么是单点登录 我们通过一个例子来说明,假设有一所大学,内部有两个系统,一个是邮箱系统,一个是课表查询系统。现在想实现这样的效果:在邮箱系统中登录一遍,然后此时进入课表系统的网站,无需再次登录,课表网站系统直接跳转到个人课表页面,反之亦然。比较专业的定义如下: 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。 SSO 的定义是在多个应用系统中... 阅读详情

第一章:Go微服务安全通信概述

在构建现代分布式系统时,微服务之间的安全通信是保障系统整体稳定与数据隐私的核心环节。Go语言凭借其高效的并发模型和简洁的语法,成为微服务开发的热门选择。然而,随着服务数量的增长,服务间通信面临窃听、篡改和身份伪造等安全威胁,因此必须引入加密传输、身份认证和访问控制机制。

安全通信的基本要素

微服务安全通信需满足以下关键要求:
  • 机密性:通过TLS加密防止数据被窃听
  • 完整性:确保数据在传输过程中未被篡改
  • 身份认证:验证通信双方的身份合法性
  • 不可否认性:确保操作行为可追溯

使用TLS保护gRPC通信

Go中常用gRPC作为微服务间通信协议,结合TLS可实现端到端加密。以下为启用TLS的服务器端配置示例:
// 加载证书和私钥
cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
if err != nil {
    log.Fatalf("无法加载证书: %v", err)
}

// 配置TLS
creds := credentials.NewTLS(&tls.Config{
    Certificates: []tls.Certificate{cert},
    ClientAuth:   tls.RequireAndVerifyClientCert,
    ClientCAs:    certPool, // 客户端证书信任池
})

// 创建gRPC服务器并启用TLS
server := grpc.NewServer(grpc.Creds(creds))
pb.RegisterUserServiceServer(server, &userServer{})
上述代码通过credentials.NewTLS创建安全凭据,并在gRPC服务器启动时注入,强制所有连接使用加密通道。

常见安全策略对比

策略适用场景优点缺点
TLS双向认证高安全要求内网服务强身份验证证书管理复杂
JWT令牌跨域服务调用无状态、易扩展需处理令牌刷新与撤销
OAuth 2.0第三方集成标准化授权流程实现复杂度高

第二章:OIDC核心机制与协议流程解析

2.1 OIDC协议基础与核心概念详解

OpenID Connect(OIDC)是在OAuth 2.0协议之上构建的身份认证层,用于实现用户身份的标准化验证。其核心角色包括用户代理、客户端、授权服务器和资源服务器。
关键术语解析
  • ID Token:JWT格式的令牌,包含用户身份信息,由授权服务器签发。
  • UserInfo Endpoint:客户端通过访问该接口获取用户的详细属性信息。
  • Nonce:防重放攻击的随机值,在请求中传入并在ID Token中返回。
典型ID Token结构示例
{
  "iss": "https://auth.example.com",
  "sub": "1234567890",
  "aud": "client-id-123",
  "exp": 1311281970,
  "iat": 1311280970,
  "nonce": "abc123"
}
上述JWT中,sub表示用户唯一标识,iss为签发者地址,aud指定接收方客户端,确保令牌的合法使用范围。

2.2 身份提供方与客户端的交互流程

在现代认证体系中,身份提供方(IdP)与客户端之间的交互遵循标准化的流程,确保安全且可扩展的身份验证。
典型交互步骤
  1. 客户端向应用发起登录请求
  2. 应用重定向至身份提供方的认证端点
  3. 用户在IdP页面完成身份验证
  4. IdP生成令牌(如JWT)并回调客户端指定的URI
  5. 客户端验证令牌并建立本地会话
令牌示例
{
  "sub": "1234567890",
  "name": "Alice",
  "iat": 1516239022,
  "exp": 1516242622,
  "iss": "https://idp.example.com"
}
该JWT包含用户标识(sub)、签发(iat)与过期时间(exp)、颁发者(iss),客户端需校验证书链与签名算法(如RS256)以确保完整性。
通信安全性保障
使用HTTPS加密传输,结合OAuth 2.0或OIDC协议,防止令牌泄露和重放攻击。

2.3 ID Token与Access Token的生成与验证机制

在现代身份认证体系中,ID Token 与 Access Token 扮演着不同但互补的角色。ID Token 用于身份验证,通常为 JWT 格式,包含用户身份信息,如 `sub`(主体标识)、`iss`(签发者)和 `exp`(过期时间)。
Token 的典型结构
{
  "sub": "1234567890",
  "name": "Alice",
  "iat": 1516239022,
  "exp": 1516242622,
  "iss": "https://idp.example.com"
}
该 JWT 由认证服务器使用私钥签名,客户端通过公钥验证其完整性,确保来源可信。
生成与验证流程
  • 用户成功认证后,授权服务器生成 Access Token(用于资源访问)和 ID Token(用于身份确认)
  • ID Token 必须使用 JWT 签名算法(如 RS256)保证防篡改
  • 客户端校验 JWT 签名、issuer、audience 和有效期,防止重放攻击
安全验证要点
检查项说明
Signature确保证书签名有效,防止伪造
exp / nbf验证时间窗口,避免使用过期 Token
aud确保 Token 是发给当前客户端的

2.4 OAuth 2.0与OIDC的差异与集成要点

OAuth 2.0 是一种授权框架,允许第三方应用在用户授权后访问其受保护资源,但不提供身份验证机制。而 OpenID Connect(OIDC)构建于 OAuth 2.0 之上,通过引入 ID Token 实现身份认证。
核心差异对比
特性OAuth 2.0OIDC
主要用途授权身份认证
Token 类型Access TokenAccess Token + ID Token(JWT)
用户信息获取需额外请求通过 /userinfo 端点或 ID Token
集成实现示例
{
  "id_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxx",
  "access_token": "ya29.a0AfB_byCH",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "openid email profile"
}
该响应来自 OIDC 认证流程,scope=openid 触发身份认证模式,ID Token 包含用户身份声明(如 sub、iss、exp),由认证服务器签名,客户端需校验其完整性与有效期。

2.5 基于JWT的声明式身份传递实践

在微服务架构中,JWT(JSON Web Token)成为跨服务身份传递的核心机制。它将用户身份信息以声明(Claims)形式嵌入令牌,实现无状态认证。
JWT结构解析
一个典型的JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),以点号分隔。例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
其中,Payload部分可携带用户ID、角色、过期时间等声明,便于服务间安全传递上下文。
生成与验证流程
使用对称或非对称算法签发令牌,确保完整性。以下为Go语言示例:

token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "sub": "123456",
    "exp": time.Now().Add(time.Hour * 24).Unix(),
})
signedToken, _ := token.SignedString([]byte("secret-key"))
该代码创建一个24小时有效的JWT,通过共享密钥签名,接收方使用相同密钥验证其合法性。
声明类型说明
sub主体,通常为用户唯一标识
exp过期时间,防止长期有效
iss签发者,用于来源校验

第三章:Go语言实现OIDC客户端的关键技术

3.1 使用golang.org/x/oauth2进行认证请求

在Go语言中,golang.org/x/oauth2包为OAuth 2.0协议提供了简洁的客户端支持,适用于访问受保护的API资源。
配置OAuth2客户端
首先需创建*oauth2.Config实例,指定客户端ID、密钥、授权端点和重定向URI:
config := &oauth2.Config{
    ClientID:     "your-client-id",
    ClientSecret: "your-client-secret",
    RedirectURL:  "http://localhost:8080/callback",
    Scopes:       []string{"read", "write"},
    Endpoint: oauth2.Endpoint{
        AuthURL:  "https://provider.com/oauth/authorize",
        TokenURL: "https://provider.com/oauth/token",
    },
}
其中,Scopes定义了请求的权限范围,Endpoint指明授权服务器的地址。此配置用于生成授权URL并交换令牌。
发起认证请求
通过config.AuthCodeURL("state")生成用户跳转链接,接收回调后调用config.Exchange()获取令牌:
token, err := config.Exchange(context.Background(), code)
if err != nil {
    log.Fatal(err)
}
client := config.Client(context.Background(), token)
Exchange方法使用授权码换取访问令牌,返回的http.Client已自动携带Bearer Token,可直接请求受保护资源。

3.2 JWT解析与签名验证的代码实现

JWT结构解析
JSON Web Token(JWT)由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),以点号分隔。解析时需先进行Base64解码,获取原始JSON数据。
Go语言实现签名验证
使用 github.com/golang-jwt/jwt/v5 库进行JWT验证:

tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxxxx"
parsedToken, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
        return nil, fmt.Errorf("unexpected signing method")
    }
    return []byte("your-secret-key"), nil
})
if err != nil || !parsedToken.Valid {
    log.Fatal("无效Token")
}
上述代码中,Parse 函数接收Token字符串和密钥解析函数。签名方法需匹配HS256,密钥必须与签发时一致。验证通过后,parsedToken.Claims 可提取用户信息。

3.3 中间件设计实现用户会话管理

在现代Web应用中,中间件是处理用户会话管理的核心组件。通过拦截HTTP请求,中间件可统一验证会话状态,确保安全性与一致性。
会话中间件工作流程
  • 接收客户端请求,解析Cookie中的会话ID
  • 查询后端存储(如Redis)获取对应会话数据
  • 附加用户信息至请求上下文,供后续处理器使用
  • 响应时自动更新会话有效期
Go语言实现示例
func SessionMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        cookie, err := r.Cookie("session_id")
        if err != nil {
            http.Redirect(w, r, "/login", http.StatusFound)
            return
        }
        session, _ := store.Get(r, cookie.Value) // 从Redis获取会话
        ctx := context.WithValue(r.Context(), "user", session.User)
        next.ServeHTTP(w, r.WithContext(ctx))
    })
}
上述代码展示了基于上下文的会话注入机制。store.Get负责从分布式缓存中恢复用户状态,context.WithValue将用户数据安全传递至业务逻辑层,实现解耦。

第四章:单点登录系统落地实施步骤

4.1 搭建Keycloak作为OIDC身份提供方

在微服务架构中,统一身份认证是安全控制的核心。Keycloak 作为开源的OIDC(OpenID Connect)身份提供方,支持标准化的认证流程,适用于多应用环境下的单点登录(SSO)场景。
安装与启动Keycloak
通过Docker快速部署Keycloak实例:

docker run -d \
  -p 8080:8080 \
  -e KEYCLOAK_ADMIN=admin \
  -e KEYCLOAK_ADMIN_PASSWORD=admin \
  quay.io/keycloak/keycloak:24.0.1 start-dev
上述命令启动开发模式的Keycloak服务,绑定主机8080端口,设置管理员账户及密码。start-dev启用默认配置,适合测试环境。
创建客户域与客户端
登录管理控制台后,需新建Realm(领域)用于隔离用户数据,并在其中注册客户端应用。配置客户端时启用“OpenID Connect”协议,设置有效重定向URI和访问类型,系统将自动生成Client ID与Secret,供应用集成使用。

4.2 Go微服务接入OIDC的完整配置流程

在Go微服务中接入OIDC(OpenID Connect)需首先引入主流库如`coreos/go-oidc`,并通过发现端点获取身份提供方(IdP)的公钥与配置信息。
依赖引入与初始化

import (
    "github.com/coreos/go-oidc/v3/oidc"
    "golang.org/x/oauth2"
)

provider, err := oidc.NewProvider(ctx, "https://idp.example.com")
if err != nil {
    log.Fatal(err)
}
上述代码初始化OIDC提供者,自动获取`.well-known/openid-configuration`元数据,建立信任链。
验证ID Token
使用提供者的验证函数校验Token签名与声明:

verifier := provider.Verifier(&oidc.Config{ClientID: "your-client-id"})
idToken, err := verifier.Verify(ctx, rawIDToken)
仅当Token由可信IdP签发且`aud`包含本服务Client ID时,验证通过。
常用配置参数表
参数说明
issuerIdP的发行者URL,必须与Token中iss一致
client_id微服务在IdP注册的应用ID
scopes请求范围,通常包含openid profile email

4.3 登录回调处理与用户信息提取实战

在OAuth 2.0登录流程中,回调处理是获取用户身份信息的关键环节。服务端需监听回调请求,解析授权码并换取用户凭证。
回调路由配置
router.Get("/auth/callback", func(c *gin.Context) {
    code := c.Query("code")
    if code == "" {
        c.JSON(400, gin.H{"error": "授权码缺失"})
        return
    }
    // 使用code请求令牌端点
    token, err := exchangeToken(code)
    if err != nil {
        c.JSON(500, gin.H{"error": "令牌交换失败"})
        return
    }
    // 提取用户信息
    user, err := fetchUserInfo(token.AccessToken)
    if err != nil {
        c.JSON(500, gin.H{"error": "用户信息获取失败"})
        return
    }
    c.JSON(200, user)
})
上述代码展示了Gin框架中回调接口的实现。首先从查询参数提取code,调用exchangeToken向认证服务器请求访问令牌,再通过令牌调用用户信息接口。
用户信息字段映射
原始字段本地模型字段说明
subID用户唯一标识
emailEmail邮箱地址
nameDisplayName显示名称

4.4 跨服务令牌传递与鉴权一致性保障

在微服务架构中,跨服务调用需确保身份令牌的透明传递与鉴权逻辑的一致性。通过统一网关注入 JWT 令牌,并在各服务间通过 HTTP 头部透传,可实现用户上下文的连续性。
令牌传递机制
服务间调用时,应携带原始请求中的 Authorization 头,避免权限上下文丢失:
// 在 Go 中透传令牌示例
req, _ := http.NewRequest("GET", "http://service-b/api", nil)
req.Header.Set("Authorization", r.Header.Get("Authorization")) // 透传令牌
该方式确保下游服务能基于同一令牌完成鉴权校验。
一致性保障策略
  • 使用集中式 OAuth2.0 认证服务器签发令牌
  • 所有服务共享同一套公钥或鉴权端点进行令牌解析
  • 引入分布式上下文追踪(如 OpenTelemetry)关联请求链路
通过上述机制,系统可在复杂调用链中维持安全边界的一致性。

第五章:总结与未来安全架构演进方向

零信任架构的持续深化
现代企业正逐步将传统边界防御模型迁移至零信任架构(Zero Trust Architecture)。以Google BeyondCorp为例,其通过设备认证、用户身份动态评估和最小权限原则,实现了无内部可信网络的访问控制。实际部署中,需结合IAM系统与实时风险评分引擎,例如使用OpenPolicyAgent进行策略决策:

package authz

default allow = false

allow {
    input.user.roles[_] == "admin"
    input.request.action == "read"
    input.device.trusted == true
}
自动化威胁响应机制
SOAR平台在大型金融组织中的应用日益广泛。某银行通过集成Splunk与Phantom,构建了自动封禁恶意IP的工作流。该流程包括日志聚合、异常行为检测、调用防火墙API封锁及生成事件报告,平均响应时间从45分钟缩短至90秒。
  • 检测阶段:EDR上报可疑PowerShell执行行为
  • 分析阶段:SIEM关联多个主机的横向移动特征
  • 响应阶段:自动推送阻断规则至Cisco Firepower管理接口
云原生安全左移实践
在CI/CD流水线中嵌入安全检查已成为标准做法。某电商平台在其GitLab CI中引入Kubescape扫描,确保Kubernetes清单文件符合NSA/CISA加固指南。
检查项修复建议严重等级
容器以root运行设置runAsNonRoot: true高危
未设置CPU限制添加resources.limits.cpu中危

DevSecOps流程示意图:

代码提交 → SAST扫描 → 镜像构建 → OPA策略校验 → 准入控制 → 运行时监控

Keycloak实战:5步搞定酷家乐OAuth2登录集成(附完整代码) 本文详细介绍了如何通过Keycloak的SPI扩展机制,实现自定义第三方登录集成,以应对非标准OAuth2协议。文章提供了从工厂类创建、核心身份提供商逻辑实现到自定义属性映射器的完整代码指南,并涵盖部署配置与高级主题,帮助开发者灵活构建企业级身份认证解决方案。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化 第二百零一十一 软件开发模型01

编号类型模型领域模型中的知识点/因素/参数关联知识和法律法规1传统顺序模型瀑布模型 (Waterfall)通用软件开发、硬件紧密耦合系统、政府/军工项目、需求稳定的传统信息系统严格线性阶段:可行性研究→需求分析(SRS,含功能/非功能/接口/约束,使用IEEE 830模板)→系统设计(概要设计HLD:架构、模块划分、数据库ER图;详细设计LLD:伪代码、类图、接口定义)→实现(编码规范、代码审查、静态分析工具SonarQube)→测试(单元测试JUnit、集成测试、系统测试、验收测试UAT,测试计划提前编写

weixin_49199313的博客 167

搭建OIDC Provider,以Golang为例

具体要不要在访问资源的时候检查token是否过期可以根据需求,也可以在前端采用各种策略(如轮询)来检查用户token是否过期,过期即要求用户重新登录,此时的access_token就会是最新的了,访问资源的时候就不需要再重新刷新access_token了。在Github注册然后登录用户后,我们就能在我的Github里创建和查看自己的Repository(代码仓库,以下简称“Repo”),同时我有两个App,一个叫Gitee,Gitlab,这两个App实现了能够访问用Github登录的用户的Repo。

weixin_45747080的博客 2362

go-oidc:Go OpenID Connect客户端

Gooid 从v2更新到v3 v3分支进行了两项重大更改。 导入路径已从: github.com/coreos/go-oidc 至: github.com/coreos/go-oidc/v3/oidc 现在, NewRemoteKeySet()的返回类型为*RemoteKeySet而不是接口( )。 Go的OpenID Connect支持 该软件包为软件包启用了OpenID Connect支持。 provider , err := oidc . NewProvider ( ctx , "https://accounts.google.com" ) if err != nil { // handle error } // Configure an OpenID Connect aware OAuth2 client. oauth2Config := oauth2. Conf

Go-OIDC 开源项目使用手册

Go-OIDC 开源项目使用手册 项目地址:https://gitcode.com/gh_mirrors/go/go-oidc 1. 项目目录结构及介绍 Go-OIDC 是一个专为 Go 语言设计的 OpenID Connect 客户端实现库。以下是其核心目录结构及其简介: . ├── pkg # 核心包,包含了客户端、服务端以及共享定义 │ ├── client ...

gitblog_00553的博客 459

YOLOv8实战:如何用Focaler-IoU提升小目标检测精度(附代码)

本文详细介绍了如何通过Focaler-IoU提升YOLOv8在小目标检测中的精度,包括核心机制解析、代码实现及调优策略。Focaler-IoU通过动态聚焦机制有效解决传统IoU对小目标检测的不足,显著提升模型性能。附有完整的代码示例和实战指南,适合计算机视觉开发者参考。

weixin_29044157的博客 364

Mac---安装Navicat

把这个填充好的字符串放入刚才打开的RSA在线加解密的网站中的第二个框框(替换之前的请求码),第一个框框不动(还是之前第10步骤中的私钥),点击RSA私钥加密,这时会得到一个加密的字符串,这个就是激活码。{“K”:“你的K值”, “N”:“52pojie”, “O”:“52pojie.cn”, “DI”:“你的DI值”, “T”:你的时间戳}链接: https://pan.baidu.com/s/1mEVY4hnKdktg-p7DBIfD7A 提取码: twwg。Navicat会弹出一个对话框,点击“注册”

weixin_53970868的博客 1万+

探索 go-oidc:构建安全OAuth2.0与OpenID Connect应用的利器

探索 go-oidc:构建安全OAuth2.0与OpenID Connect应用的利器 go-oidcA Go OpenID Connect client.项目地址:https://gitcode.com/gh_mirrors/go/go-oidc 是一个由 CoreOS 团队开发并维护的 Go 语言库,它实现了 OAuth2.0 和 OpenID Connect 标准,为开发者提供了一种简单、...

gitblog_00041的博客 1377

多模型对抗性审查:用AI辩论提升技术文档质量

在软件工程领域,技术文档是团队协作和项目成功的关键基础。传统的文档评审依赖人工经验,存在盲区和效率瓶颈。通过引入多模型对抗性审查机制,不同大语言模型从各自视角对文档进行批判性分析,模拟现实中的专家评审过程。这种技术方法的核心价值在于利用模型间的思维差异,自动发现单个视角容易忽略的边界情况、逻辑漏洞和隐含假设。在应用场景上,特别适合产品需求文档和技术规格书这类需要多角度审视的复杂文档。adversarial-spec工具通过Claude协调多模型辩论,实现从概念到实现的完整文档质量保障,显著提升文档的完整性和

weixin_42531579的博客 379

**Go-oidc:让Go语言中的身份验证变得更轻松**

在当今互联网世界中,安全且便捷的身份验证变得越来越重要。无论是为你的应用提供用户登录功能还是保护API,身份验证都是不可或缺的一环。今天,我们来了解一款旨在简化OpenID Connect集成的优秀Go语言库——**go-oidc**。 ## 项目介绍 **go-oidc**是针对Go语言设计的一个OpenID Connect支持包。它作为对[golang.org/x/oauth2](http...

gitblog_00649的博客 1122

2025年情感分析(SA)综述——论文阅读报告

2025年情感分析(SA)综述——论文阅读报告

Samdy_L的博客 2088

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-串联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行串联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 339

go-oidc 项目常见问题解决方案

go-oidc 是一个用于 Go 语言的 OpenID Connect 客户端库。它使得在 Go 项目中集成 OpenID Connect 认证变得更加容易。该项目的主要编程语言是 Go,并且它依赖于 `golang.org/x/oauth2` 包来实现 OAuth2 认证。 ## 新手使用注意事项及解决方案 ### 1. 导入路径问题 **问题描述**:在从 v2 升级到 v3 版本时,导...

gitblog_00322的博客 589

编程实践:寒武纪-LLM&VLM模型量化&部署

本文介绍了在MLU370-S4平台上对大模型(LLM/VLM)进行量化的两种方法:SmoothQuant和WeightOnly。以Qwen2-VL-2B模型为例,详细说明了两种量化方式的命令行参数配置,包括必须设置的per_channel选项和量化参数调整建议。量化完成后,提供了模型部署的具体命令示例,包含设备分配、端口设置、并行度等关键参数。文章强调在MLU370芯片上需要手动设置block_size,并指出两种量化方式只能二选一使用。配套资料已上传至百度网盘供参考。

微风❤水墨 510

【Go微服务安全认证】:为什么90%的开发者都搞错了OAuth2集成方式?

掌握Go微服务安全认证核心方法,避开OAuth2集成常见误区。本文详解Go OAuth2 整合的正确实践,涵盖JWT验证、授权码模式与中间件设计,提升系统安全性与可维护性,值得收藏。

QuickTrans的博客 663

45.qt quick-qml虚拟软键盘详解(一)

1.qml虚拟键盘介绍 Qt虚拟键盘的主要功能包括: 可定制的键盘布局和风格与动态切换。 带有单词选择的预测性文本输入。 角色预览和替代角色视图。 自动大小写和空格插入。 不同分辨率的可伸缩性。 支持不同的字符集(拉丁,简体/繁体中文,印地语,日语,阿拉伯语,希伯来语,韩语和其他)。 支持大多数常见的输入语言,可以轻松扩展语言支持。 从左到右和从右到左的输入。 硬件键支持2路和5路导航。 手写支持,带有全屏输入的手势。 音频反馈。 跨平台功能。 支持多国语言,高达40多个语言 本

抵抗时间扭曲,坚持做一件有意义的事 3561

python抓取美团外卖的数据(商家、评分、评论)

本文详细介绍了如何使用Selenium和抓取美团外卖的商家、评分和评论数据。我们从基础的爬虫原理入手,分析了美团外卖的网页结构,提出了应对反爬虫机制的策略,并给出了详细的代码实现。通过使用Selenium,我们能够绕过动态加载内容的限制,直接抓取网页中的商家信息和评论。结合多线程和代理池等技术,我们可以进一步提高爬虫效率,并避免IP被封禁。未来,随着爬虫技术的发展,我们可以进一步探索深度抓取、数据清洗和数据分析等高级应用,以实现更智能的网页数据抓取。

2201_76125261的博客 2704

实现零信任架构下的安全互操作(仅限资深架构师掌握的3种模式)

掌握零信任架构下互操作的安全实现方法,解决跨系统身份验证与数据交换难题。详解3种资深架构师专用模式,涵盖多云协同、API网关集成与动态授权场景,确保安全可控。提升系统兼容性与防护力,值得收藏。

CodeWhim的博客 957

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

frp oidc frp使用oidc认证和搭建, frp使用oidc 认证的oidc 服务端搭建

frp oidc frp使用oidc认证和搭建, frp使用oidc 认证的oidc 服务端搭建

一纸荒凉i的博客 2153

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

AutoGPT 平台 Codex 订阅直连(Subscription Transport)私有预览指南:打通 ChatGPT 账号与 Codex App Server 的三种执行路径

AutoGPT 平台(autogpt_platform)提供了一项连接自有 ChatGPT/Codex 订阅账号的能力,把**账号自己的 Codex 额度**接入现有的 Code Generation 块、AutoPilot 会话与 AutoPilot 图节点执行。本文以 [docs/platform/codex-subscription-preview.md](https://link.gitc

gitblog_00823的博客 1002

go-oidc完全指南:如何快速构建安全的身份认证系统

go-oidc是一个Go语言实现的OpenID Connect客户端库,它为开发者提供了简单高效的工具来构建安全可靠的身份认证系统。通过go-oidc,你可以轻松集成OpenID Connect协议到你的Go应用中,实现用户身份验证、授权和用户信息获取等核心功能。 ## 为什么选择go-oidc? OpenID Connect(OIDC)是基于OAuth 2.0的身份认证协议,它允许客户端验证

gitblog_00877的博客 505

go-oidc与微服务架构:实现跨服务的统一身份认证

在当今微服务架构盛行的时代,构建安全可靠的跨服务身份认证系统成为开发者面临的重要挑战。**go-oidc**作为一个Go语言实现的OpenID Connect客户端,为微服务架构提供了强大的身份认证解决方案,帮助开发者轻松实现跨服务的统一身份认证与授权管理。 ## 什么是OpenID Connect? OpenID Connect(OIDC)是基于OAuth 2.0协议的身份认证层,它允许客户

gitblog_00351的博客 907

OAuth2.0 & OIDC1.0及落地方案

本文介绍了OAuth2.0 & OIDC1.0的相关术语、授权模式及交互流程等,并站在不同角度论述了OAuth2.0 & OIDC1.0作为建设企业用户认证中心的落地思路,给出了不同客户端类型关于授权模式的选型建议,最后结合Spring Security OAuth2生态给了典型架构(前后端分离+微服务+应用网关)的集成示例。

罗小爬的技术宝书 4381

从登录失败到无缝接入:AFFiNE项目OIDC认证配置完全指南

团队在集成企业级OIDC(OpenID Connect)登录时遭遇"invalid_grant"错误,导致外部协作用户无法访问[docs/CONTRIBUTING.md](https://link.gitcode.com/i/42d71c059a0c4f92014065aeb156bbcf)中描述的协作功能。该问题主要影响两类场景: - 远程开发团队通过[packages/frontend/cor...

gitblog_00764的博客 500

轻松实现单点登录(SSO):基于 Keycloak 的 OIDC 与 OAuth 2.0 完整指南

Keycloak 是一款强大的开源身份与访问管理工具,广泛支持 OIDC(OpenID Connect)和 OAuth 2.0 协议,提供统一认证与授权服务。本指南详细讲解了 Keycloak 在 OIDC 和 OAuth 2.0 场景下的登录流程,包括授权码模式、客户端模式、Token 刷新与验证,以及使用 Token 查询用户信息的完整示例。还深入分析了 OIDC 和 OAuth 的区别,如何处理多系统间登录兼容问题,并提供了丰富的 Keycloak API 实践案例,是构建安全、高效认证系统的必备教程

楠搏万的博客 7718

搭建一个基于SpringBoot的OIDC客户端

基于SpringBoot的OIDC客户端demo

Forget_Re的博客 2606

本地搭建hydra服务用go以验证oidc流程

环境:windows10。

m0_37570494的博客 1006
上一篇: Go负载均衡配置全攻略(从入门到生产级部署)
下一篇: Go HTTP服务端性能调优实战(从300ms到30ms的极致优化路径)
SimCompile
博客等级 码龄1年 140粉丝 2012原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值