怎么获取token值(如何获取token值)

广告 X
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

SSO的通用标准OpenID Connect

OpenID Connect简称为OIDC,已成为Internet上单点登录和身份管理的通用标准。 它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。

OAuth2实际上只做了授权,而OpenID Connect在授权的基础上又加上了认证。

OIDC的优点是:简单的基于JSON的身份令牌(JWT),并且完全兼容OAuth2协议。

今天我们将会介绍一下OIDC的具体原理。

OpenID Connect发布于2014年,是建立在OAuth 2.0协议之上的简单身份层,它允许客户端基于授权服务器或身份提供商(IdP)进行的身份验证来验证最终用户的身份,并获得用户的相关信息。

OpenID Connect提供了RESTful HTTP API,并使用Json作为数据的传递格式。

之前我们讲到了基于XML格式的SAML协议,而OpenID Connect因为其更加简洁的数据交换格式,被越来越多的应用使用,已经成为事实上的标准。

我们看一下OpenID connect的基本流程:

ID Token就像是一个用户的身份证,它是以JWT格式存在的,并且由OP进行签名,保证它的安全性。

获取ID Token的方式就是向OP发送认证请求。

因为ID Token是以JWT格式存在的,JWT可以分为三个部分,分别是Header,Payload和Signature。

这里我们主要关注一下Payload的json内容:

上面的是ID Token的标准Claims。

现在我们知道了ID Token是什么,那么在OpenID Connect的RP客户端如何请求一个ID Token呢?

虽然OpenID Connect并未指定应如何实际验证用户身份,这取决于提供者来决定。但是我们通常由Web浏览器来执行认证步骤。

浏览器将用户重定向到认证服务器的认证窗口,用户输入用户名和密码之后,通过OAuth 2.0协议请求ID token。

使用OAuth 2.0来获取ID Token有3种方式:

Authorization Code流程的步骤如下:

客户端准备身份认证请求,请求里包含所需要的参数

客户端发送请求到授权服务器

授权服务器对最红用户进行身份认证

授权服务得最终用户的统一/授权

授权服务器把最终用户发送回客户端,同时带着授权码

客户端使用授权码向Token端点请求一个响应

客户端接收到响应,响应的Body里面包含在和ID Token和Access Token

客户端验证ID Token,并获得用户的一些身份信息

上图就是一个隐式授权的例子,和Authorization Code模式不同的是,认证服务器返回的是一个access token片段,只有这个片段,我们是无法得到access token的。

这里我们需要额外请求一次client resource服务器,服务器将会返回一个script脚本,通过这个脚本,我们对access token片段进行解析,得到最终的access token。

混合模式比较少用到,它是前面两种模式的混合,它允许从前端和后端分别获取token值。

那么我们拿到请求得到的ID Token可以做什么事情呢?

服务器端不需要存储会话信息,我们只需要在服务器端对token进行验证即可。

这里我们举一个使用认证码授权获取到ID token的例子。

下面是一个重定向的例子:

在OP端,将会检测是否已经存在一个有效的用户session,否则将会弹出用户登录界面,让用户登录。

登录成功之后,client将会重定向到redirect_uri,并带上认证码:

上面返回的code只是一个中间产物,RP需要将code提交给OP换取ID token。

这次我们直接使用一个后端的POST请求:

如果成功,OP会返回一个JSON对象,带有ID token, access token 或者 refresh token:

其中ID token的格式是JWT。

我们获取到的ID token里面已经包含了一些非常有用的claims信息。

事实上ID Token还可以包含其他的user info信息:

比如name,profile,picture,email,gender,birthdate,phone_number,address等等有用的信息。

我们可以在token请求的时候添加上额外的scope:

比如上面的例子中,我们添加了额外的email信息,那么OP将会在token中加入email选项。

比如:

本文作者:flydean程序那些事

本文链接:http://www.flydean.com/openid-connect-startup/

本文来源:flydean的博客

欢迎关注我的公众号:「程序那些事」最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

第八课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易

今天最近在做登录、授权的功能,一开始考虑到的是spring boot + spring security,但spring security太重,而我们是轻量级的项目,所以,spring security不适合我们。

而后考虑spring boot + shiro,但shiro自带的aop会影响spring boot的aop,所以,shiro也不适合我们。

后来浏览github时,发现Sa-Token这个框架,如下是Sa-Token的功能图:

Sa-Token是一个轻量级Java权限认证框架。

主要解决的问题如下:

对于一些登录之后才能访问的接口(例如:查询我的账号资料),我们通常的做法是增加一层接口校验:

那么,判断会话是否登录的依据是什么?我们先来简单分析一下登录访问流程:

所谓登录认证,指的就是服务器校验账号密码,为用户颁发Token会话凭证的过程,这个Token也是我们后续通过接口校验的关键所在。

根据以上思路,我们需要一个会话登录的函数:

只此一句代码,便可以使会话登录成功,实际上Sa-Token在背后做了大量的工作,包括但不限于:

你暂时不需要完整的了解整个登录过程,你只需要记住关键一点:Sa-Token 为这个账号创建了一个Token凭证,且通过Cookie 上下文返回给了前端。

所以一般情况下,我们的登录接口代码,会大致类似如下:

如果你对以上代码阅读没有压力,你可能会注意到略显奇怪的一点:此处仅仅做了会话登录,但并没有主动向前端返回Token信息。是因为不需要吗?严格来讲是需要的,只不过方法利用了Cookie自动注入的特性,省略了你手写返回Token的代码。

你需要了解Cookie最基本的两点:

因此,在Cookie功能的加持下,我们可以仅靠 一句代码就完成登录认证。

除了登录方法,我们还需要:

异常NotLoginException代表当前会话暂未登录,可能的原因有很多:

有关TokenInfo参数详解,如下代码所示:

新建LoginController,复制以下代码

所谓权限认证,核心逻辑就是判断一个账号是否拥有指定权限:

深入到底层数据中,就是每个账号都会拥有一个权限码集合,框架来校验这个集合中是否包含指定的权限码。

例如:当前账号拥有权限码集合 [user-add, user-delete, user-get],这时候我来校验权限 user-update,则其结果就是:验证失败,禁止访问。

所以现在问题的核心就是:

因为每个项目的需求不同,其权限设计也千变万化,因此 [ 获取当前账号权限码集合 ] 这一操作不可能内置到框架中, 所以Sa-Token将此操作以接口的方式暴露给你,以方便你根据自己的业务逻辑进行重写。

你需要做的就是新建一个类,实现StpInterface接口,例如以下代码:

参数解释:

然后就可以用以下api来鉴权了

扩展:对象可通过方法获取具体是哪个StpLogic抛出的异常

在Sa-Token中,角色和权限可以独立验证

扩展:对象可通过方法获取具体是哪个StpLogic抛出的异常

有同学要问,鉴权失败,抛出异常,然后呢?要把异常显示给用户看吗?当然不可以!

你可以创建一个全局异常,统一返回给前端的格式,参考:

可参考:码云:

https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-springboot/src/main/java/com/pj/current/GlobalException.java

Sa-Token允许你根据通配符指定泛权限,例如当一个账号拥有的权限时,user-add、user-delete、user-update都将匹配通过

上帝权限:当一个账号拥有 * 权限时,他可以验证通过任何权限码 (角色认证同理)

权限精确到按钮级的意思就是指:权限范围可以控制到页面上的每一个按钮是否显示。

思路:如此精确的范围控制只依赖后端已经难以完成,此时需要前端进行一定的逻辑判断。

如果是前后端分离项目,则:

其中:arr是当前用户拥有的权限码数组,user:delete是显示按钮需要拥有的权限码,删除按钮是用户拥有权限码才可以看到的内容。

注意:以上写法只为提供一个参考示例,不同框架有不同写法,大家可根据项目技术栈灵活封装进行调用。

需要!

前端的鉴权只是一个辅助功能,对于专业人员这些限制都是可以轻松绕过的,为保证服务器安全,无论前端是否进行了权限校验,后端接口都需要对会话请求再次进行权限校验!

上述只提供了登录认证和权限认证的两个功能,Sa-Token还有如下诸多功能:

Maven依赖

Gradle依赖

Gitee地址:https://gitee.com/dromara/sa-token

GitHub地址:https://github.com/dromara/sa-token

在IDE中新建一个SpringBoot项目,例如:

在pom.xml中添加依赖:

你可以零配置启动项目 ,但同时你也可以在 application.yml 中增加如下配置,定制性使用框架:

在项目中新建包com.pj,在此包内新建主类 SaTokenDemoApplication.java,复制以下代码:

启动代码,从浏览器依次访问上述测试接口:

Reactor是一种非阻塞的响应式模型,以WebFlux 为例来展示Sa-Token与Reactor响应式模型框架相整合的示例, 你可以用同样方式去对接其它 Reactor模型框架(Netty、ShenYu、SpringCloud Gateway等)

整合示例在官方仓库的文件夹下,如遇到难点可结合源码进行测试学习

WebFlux 用于微服务网关架构中,如果您的应用基于单体架构且非Reactor 模型

在IDE中新建一个SpringBoot项目,例如:sa-token-demo-webflux

在pom.xml中添加依赖:

在项目中新建包com.pj,在此包内新建主类 SaTokenDemoApplication.java,输入以下代码:

新建SaTokenConfigure.java,注册Sa-Token的全局过滤器

你只需要按照此格式复制代码即可。

启动代码,从浏览器依次访问上述测试接口:

Sa-Token框架是一个轻量级的登录、鉴权框架,有利于我们开发。

Sa-Token框架的官方文档:https://sa-token.cc/doc.html#/

来源:blog.csdn.net/lvoelife/article/details/126533792

放心签 SaaS API标准版接口如何获取token?

【本文目标】

通过逐步的指导和截图举证,一步步带领一个技术小白完成一个数字货币(通证,代币,TOKEN)的发布演示和上线交易。

【环境前置条件】

参考《第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)》,已在本地WIDOWS环境完成MetaMask轻钱包客户端的安装和配置;作者建议最好遵循从头开始的课程学习顺序。不过如果你想半途插入实操学习,问题也不大,遇到障碍时反向找对应文章的指导内容即可完成。

【技术收获】

从本实践中,你可以学习到:

ERC20 Token的定义和实践

使用Remix Solidity IDE编写智能合约和编译调试

使用MetaMask完成钱包账户查看

使用网页钱包完成代币交易演示

【实操课程列表】

第一课 如何在WINDOWS环境下搭建以太坊开发环境

第二课 如何实现以太坊最简智能合约“Hello World”的运行

第四课 以太坊开发框架Truffle从入门到实战

第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)

第七课 技术小白如何在45分钟内发行通证(TOKEN)并上线交易

第八课 如何调试以太坊官网的智能合约众筹案例

第九课 如何在Remix环境下进行Solidity代码单步调试

第十课 Solidity语言编辑器REMIX指导大全

【说明】未列出的课程为知识普及的非实操类课程,所有区块链文章参考“区块链入口”专栏。

定义

ERC20合约是在2015年11月在EIP上提出的一个合约标准,代币定义的一个标准。

Token代表数字资产,具有价值,但是并不是都符合特定的规范。

基于ERC20的货币更容易互换,并且能够在Dapps上相同的工作。

新的标准可以让token更兼容,允许其他功能,包括投票标记化。操作更像一个投票操作,Token的持有人可以完全控制资产,遵守ERC20的token可以跟踪任何人在任何时间拥有多少token。基于eth合约的子货币,所以容易实施。

ERC20 Token接口说明

方法

注意:调用者必须处理返回false的returns (bool success).调用者绝对不能假设返回false的情况不存在。

name

返回这个令牌的名字,比如"MyToken".

可选 - 这种方法可以用来提高可用性,但接口和其他契约不能指望这些值存在。

symbol

返回令牌的符号,比如HIX.

可选 - 这种方法可以用来提高可用性,但接口和其他契约不能指望这些值存在。

decimals

返回token使用的小数点后几位, 比如 8,表示分配token数量为100000000

可选 - 这种方法可以用来提高可用性,但接口和其他契约不能指望这些值存在。

totalSupply

返回token的总供应量。

balanceOf

返回地址是_owner的账户的账户余额。

transfer

转移_value的token数量到的地址_to,并且必须触发Transfer事件。 如果_from帐户余额没有足够的令牌来支出,该函数应该被throw。

创建新令牌的令牌合同应该在创建令牌时将_from地址设置为0x0触发传输事件。

注意 0值的传输必须被视为正常传输并触发传输事件。

transferFrom

从地址_from发送数量为_value的token到地址_to,必须触发Transfer事件。

transferFrom方法用于提取工作流,允许合同代您转移token。这可以用于例如允许合约代您转让代币和/或以子货币收取费用。除了_from帐户已经通过某种机制故意地授权消息的发送者之外,该函数应该throw。

注意 0值的传输必须被视为正常传输并触发传输事件。

approve

允许_spender多次取回您的帐户,最高达_value金额。 如果再次调用此函数,它将以_value覆盖当前的余量。

注意:为了阻止向量攻击,客户端需要确认以这样的方式创建用户接口,即将它们设置为0,然后将其设置为同一个花费者的另一个值。虽然合同本身不应该强制执行,允许向后兼容以前部署的合同兼容性

allowance

返回_spender仍然被允许从_owner提取的金额。

Events

Transfer

当token被转移(包括0值),必须被触发。

Approval

当任何成功调用approve(address _spender, uint256 _value)后,必须被触发。

[官网接口说明点击查看],(https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md)

接口文件ERC20Interface.sol如下:

合约文件TokenERC20.sol如下:

函数的功能参考函数的说明描述和代码自解释。

MetaMask钱包联网

【前置条件】作者假设学习者已完成MetaMask的安装和配置。还没有完成的,参考《第六课 技术小白如何开发一个DAPP区块链应用(以宠物商店为例)》的章节“5. 安装 MetaMask和配置区块链网络”,在本地WIDOWS环境完成MetaMask轻钱包客户端的安装和配置。

打开MetaMask钱包,点击左上角的“Ropsten Test Network” 连接成功。

连接成功

查看存量的账号Account 1,其中ETH余额显示为0。

存量账号Account 1余额为0

点击“Copy Address to Clipboard”,记录Account 1钱包地址为

点击MetaMask右上角环形头像的菜单“Create Account”, 创建一个新钱包账号Account 8,

新增账号成功

记录Account 8的钱包地址为

点击Account 8的"BUY"按钮,可以从“Ropsten Test Network” 免费获取一些测试ETH。

跳转到BUY ETH页面

点击按钮“ROPSTEN TEST FAUCET”可以看到赠送页面

点击绿色按钮,等待10秒以上,成功的话每次可以获取1个测试ETH。

【故障排查】

赠送失败

作者操作时,出现错误。从提示看,是由于用户交易拒绝。等10秒后再点击该绿色按钮则未有错误提示了。原因不明,可能是操作频繁导致。

多次点击,偶尔出错,小编一共从这个测试网站获取了5个测试ETH用于作为发币的GAS燃料。

获取测试ETH

Remix Solidity IDE调试环境介绍

1,代码编写和编译

我们以第二课的“Hello World”智能合约为例,参考下图可完成编译和语法错误发现。

编译环境使用方法

2,合约创建

参考附图描述,在配置号MetaMask账号和网络连接的情况下,确保账户有虚拟ETH用于合约创建花销。最后点击“Create”按钮可以完成合约创建。点击输出区的网页链接可以查看合约的详细情况。

支付合约花销

image.png

3, 合约执行

参考附件路径图,点击RUN按钮可以执行一次合约。点击下方的“Say”按钮,可以看到合约输出。在调试输出窗口可以看到“call to hello.say”的运行提示。

合约执行

【总结】所以说,没有Ubuntu+Ganache等,直接在WINDOWS环境,也可以使用Remix+MetaMask+Ropsten Test Network组合完成一套完整的以太坊测试环境。

更详细的REMIX帮助文档参考第十课 Solidity语言编辑器REMIX指导大全

编译ERC20智能合约

CHROME浏览器打开Remix Solidity IDE环境,打开之前编写的“TokenERC20.sol”智能合约,然后点击右侧的“start to compile”按钮。可以看到,除了一些Warning提示外,智能合约编译成功。

编译操作

运行ERC20智能合约

运行页面

切换到"RUN"页面,Environment选择“Injected Web3”, Account自动更新为MetaMask的Account 8账号。“Create”按钮前按照发币数量(本次发1个亿),代币名称,代币符号填写为100000000,"ColorBay","CB"。

点击"Create"按钮,会弹出一个交易确认框,设置合理的Gas Price,但要确保Max Transaction Fee不会超过Account 8的ETH总数,点“SUBMIT”按钮。

智能合约部署

部署成功的话,Account8 会产生一条交易记录,显示状态为“Contract Published”,表示部署成功了。

部署成功

【说明】有时点击账号,会出现“Retry with a higher gas price here”的提示,一般情况下再等待10秒看看能否交易成功。万一还是不成的话,可考虑该Gas Price大点。

部署确认中

MetaMask加载TOKEN

点击Account 8的交易记录,可以跳转智能合约部署信息显示页面:

部署成功

获取智能合约地址为0x5eeec41dc08d7caece17c4a349635934637036f1,点击可查看该交易详情。

点击MetaMask的Account 8账号的TOKENS页面的“ADD TOKEN”按钮,把代币智能合约地址Token Contract Address为0x5eeec41dc08d7caece17c4a349635934637036f1,代币标识符Token Symbol为CB,则可以创建你的代币了。

代币创建成功,一共有1亿个CB币了。此时,点击100000000的代币位置,跳转到代币查询页面, 可以在etherscan网站看到账户的持币数量了。

1亿

TOKEN信息

截止作者发稿时,以太坊的价格为2559元/个,而你有1亿个CB币,是不是快要走上人生巅峰了呢?哈哈,做个梦而已。真正的区块链应用,要能有生态,能为人类社会创造价值,而不是讲故事,割韭菜!

由于MetaMask插件没有提供代币交易功能,同时考虑到很多人并没有以太坊钱包或是被以太坊钱包网络同步问题折磨,今天我用网页钱包来讲解代币交易。

1. 进入网页钱包地址

第一次进入有一些安全提示需要用户确认。

2. 进入之后,按照下图进行设置

网络配置

3,增加自定义代币

填写地址Token Contract 为0x5eeec41dc08d7caece17c4a349635934637036f1和其他信息,点击保存按钮。

增加自定义TOKEN

配置TOKEN合约地址和代币符号

配置成功的界面如下:

【说明】如果不成功,则提示为“Not a valid ERC-20 token CB”,则可能是代币信息填写不正确或者右上角的网络选择错误,没有选择“Network Ropston(infura.com)”选项引起。4.转账给Account 1

填写Account 1的地址“0xD1F7922e8b78cBEB182250753ade8379d1E09949”到“发送至地址”输入框,

选择CB,不是ETH

转账确认

交易确认

交易提示

查看账户余额,Account 8减少800万个CB币,而Account 1则增加了800万个CB币。

Account 8

Account 1

转账交易成功了!

本文是站在巨人的肩膀上的操作实践,感谢以下文章作者的帮助:

知识对接服务:

辉哥和欧阳哥哥在知识星球开通了区块链入门专栏,用于存放简书区块链入门专栏文章的工程源码等内容,并建立专项微信群用于技术交流,欢迎加入。

https://t.zsxq.com/ZFaaYVF

上一篇: 区块链项目首码论坛-区块链项目首码平台
下一篇: feg币今日价格走势-feg币最新价格

为您推荐