授权服务是如何颁发授权码和访问令牌的?(中)

简介: 授权服务是如何颁发授权码和访问令牌的?(中)

过程二:颁发访问令牌access_token

xx最终要获取访问令牌access_token,才可请求受保护资源。而授权码只是一个换取访问令牌access_token的临时凭证。

当小兔拿着授权码code来请求的时候,授权服务需要为之生成最终的请求访问令牌。

第一步,验证第三方软件是否存在

此时,接收到的grant_type的类型为authorization_code。

String grantType = request.getParameter("grant_type");
if("authorization_code".equals(grantType)){
}

颁发访问令牌是后端完成,所以校验app_id、app_secret。

if(!appMap.get("app_id").equals(appId)){
    //app_id不存在
}
if(!appMap.get("app_secret").equals(appSecret)){
    //app_secret不合法
}

第二步-验证授权码code值是否合法

授权服务在颁发授权码code的阶段已存储code值,此时对比从request中接收到的code值和从存储中取出来的code值。在我们给出的课程相关代码中,code值对应的key是app_id和user的组合值。

String code = request.getParameter("code");
if(!isExistCode(code)){//验证code值
  //code不存在
  return;
}
codeMap.remove(code);//授权码一旦被使用,须立即作废

确认过授权码code值有效后,应立刻从存储中删除当前code值,以防止第三方软件恶意使用一个失窃的授权码code值来请求授权服务。

第三步-生成访问令牌access_token值

OAuth 2.0规范规定必须符合三个原则:唯一性、不连续性、不可猜性。UUID可考虑来作为示例的。


和授权码code值一样,需要存储访问令牌access_token值,并将其与三方软件应用标识app_id和资源拥有者标识user映射。也就是说,一个访问令牌access_token表示某一个用户给某一个第三方软件进行授权。


同时,授权服务还需要将授权范围跟访问令牌access_token做绑定。最后要为该访问令牌设置一个过期时间expires_in。

Map<String,String[]> tokenScopeMap =  new HashMap<String, String[]>();
String accessToken = generateAccessToken(appId,"USERTEST");//生成访问令牌access_token的值
tokenScopeMap.put(accessToken,codeScopeMap.get(code));//授权范围与访问令牌绑定
//生成访问令牌的方法
private String generateAccessToken(String appId,String user){
  String accessToken = UUID.randomUUID().toString();
  String expires_in = "1";//1天时间过期
  tokenMap.put(accessToken,appId+"|"+user+"|"+System.currentTimeMillis()+"|"+expires_in);
  return accessToken;
}

OAuth 2.0没有约束访问令牌内容的生成规则,可以生成一个UUID存储,让授权服务和受保护资源共享该数据,也可将一些必要信息通过结构化处理放入令牌本身。我们将包含一些信息的令牌,称为结构化令牌,简称JWT。


至此,授权码许可类型下授权服务的两大主要过程,也就是颁发授权码和颁发访问令牌的流程,我就与你讲完了。


颁发授权码和颁发访问令牌,就是授权服务的核心。


目录
相关文章
|
数据安全/隐私保护
关于 OAuth 2.0 统一认证授权
随着互联网的巨头大佬逐渐积累了海量的用户与数据,用户的需求越来越多样化,为了满足用户在不同平台活动的需求,平台级的厂商则需要以接口的形式开放给第三方开发者,这样满足了用户的多样性需求,也可以让自己获得利益,让数据流动起来,形成给一个良性的生态环境,最终达到用户、平台商、第三方开发者共赢。
2985 0
|
2月前
|
存储 安全 API
在ModelScope中,访问令牌通常用于身份验证和授权
随着人工智能技术的发展,ModelScope(魔搭)作为开放的模型即服务(MaaS)平台,提供了丰富的预训练模型资源。本文介绍了如何在ModelScope中使用访问令牌进行身份验证和授权,包括获取和使用访问令牌的详细步骤及示例代码,确保用户安全地访问模型资源。
43 3
|
3月前
|
安全 API 数据安全/隐私保护
基于Keycloak的认证与授权
【10月更文挑战第27天】Keycloak 是一个开源的身份和访问管理解决方案,提供用户认证、授权、单点登录等功能,保护应用程序和服务的安全。其认证流程包括用户登录、凭证验证、身份验证令牌生成、令牌返回给应用、应用验证令牌、用户身份确认。Keycloak 支持资源定义、权限定义、角色创建与分配、用户角色分配、访问请求与授权决策等授权流程。其优势在于集中式管理、高安全性、良好扩展性和社区支持。适用于企业应用集成、微服务架构、移动应用及 API 安全等多种场景。
|
5月前
|
数据安全/隐私保护
OAuth 2.0身份验证及授权
8月更文挑战第24天
210 0
|
8月前
|
存储 应用服务中间件 API
Oauth 2 授权码模式
Oauth 2 授权码模式
188 1
|
8月前
|
API Python
在ModelScope中,访问令牌通常用于身份验证和授权。
在ModelScope中,访问令牌通常用于身份验证和授权。
259 3
|
存储 JSON 安全
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
授权代码授权类型可能是您将遇到的最常见的 OAuth 2.0 授权类型。Web 应用程序和本机应用程序都使用它在用户授权应用程序后获取访问令牌。 这篇文章是我们探索常用的 OAuth 2.0 授权类型系列文章的第一部分。如果您想在深入了解 OAuth 2.0 之前稍微回顾一下并了解更多信息,请查看OAuth 到底是什么?
164 0
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
|
存储 开发框架 安全
快速理解 IdentityServer4 中的认证 & 授权
在实际的生产环境中,存在各种各样的应用程序相互访问,当用户访问 `app` 应用的时候,为了安全性考虑,通常都会要求搭配授权码或者安全令牌服务一并访问,这样可有效地对 `Server` 端的 `API` 资源起到一定程度的有效保护...
474 0
快速理解 IdentityServer4 中的认证 & 授权
|
安全
授权服务是如何颁发授权码和访问令牌的?(下)
授权服务是如何颁发授权码和访问令牌的?(下)
376 0
授权服务是如何颁发授权码和访问令牌的?(下)
|
存储 前端开发 定位技术
授权服务是如何颁发授权码和访问令牌的?(上)
授权服务是如何颁发授权码和访问令牌的?
262 0
授权服务是如何颁发授权码和访问令牌的?(上)