TOKEN是一种用于身份验证和授权的令牌,通常用于保护API和web应用程序的安全。获取token的过程因不同的认证和授权机制而异,但常见的方法包括以下几种:
一.基于用户名和密码的认证
这是最常见的获取TOKEN的方式之一,通常涉及以下几个步骤:
1.客户端发送请求:客户端(如浏览器或移动应用)向服务器发送包含用户名和密码的登录请求。
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "user",
"password": "password"
}
2.服务器验证凭据:服务器接受请求并验证用户名和密码是否正确。
如果凭证正确,服务器生成一个token
如果凭证错误,服务器返回错误信息
3.服务器返回token:如果验证成功,服务器将生成的token返回给客户端
HTTP/1.1 200 OK
Content-Type: application/json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
4.客户端存储token:客户端受到token后,将其存储在本地(如浏览器的localstorage或sessionstorage中)。
二.OAUTH 2.0认证
OAUTH2.0是一种常用的授权框架,用于第三方应用程序访问受保护的资源。获取token的过程,通常包括一下几个步骤:
1.客户端请求授权:客户端引导用户授权访问授权服务器的授权页面
GET https://example.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
一般是qq、微信或则leetcode等其他应用网站,根据需要提供相应的信息比如(appid,AppSecret和登录回调地址等)
2.用户授权: 用户在授权页面上同意授权请求后,授权服务器将用户重定向回客户端制定的回调url,并附带一个授权码。
GET REDIRECT_URI?code=AUTHORIZATION_CODE
3.客户端请求token:客户端使用授权码向授权服务器请求token
POST /oauth/token HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
4.服务器返回token:授权服务器验证授权码和其他参数后,返回一个token
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "REFRESH_TOKEN"
}
5.客户端存储token
三.JSON WEB TOKENS(JWT)
json web tokens是一种开放标准(RFC7519),用于在各方之间安全的传输信息,获取JWT的过程通常类似于基于用户名和密码的认证:
1.客户端发送请求: 客户端向服务器发送包含用户名和密码的登录请求
POST /login HTTP/1.1
Host: example.com
Content-Type: application/json
{
"username": "user",
"password": "password"
}
2.服务器验证凭据: 服务器验证用户名和密码是否正确
如果凭证正确,服务器生成一个JWT
如果凭据错误,服务器返回错误信息
3.服务器返回JWT,如果验证成功,服务器将生成的JWT返回给客户端
HTTP/1.1 200 OK
Content-Type: application/json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
4.客户端存储JWT,将其存储到本地
使用token进行后续请求
无论通过哪种方式获取token,客户端在后续的请求中都需要将token包含在请求头中,以便服务器验证请求的有效性。
GET /protected-resource HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
通过这种方式,服务器可以验证请求的来源,并确保只有经过授权的用户才能访问受保护的资源