JWT
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[ASP.NET Core Web]]
&color(red){※This article is based on .NET 7};
#contents
* 概要 [#kd0a4304]
** 什么是JWT [#k677d8a4]
JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。
JWT的官网地址:
https://jwt.io/
通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT令牌在a...
JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可...
** JSON Web令牌应用场景 [#n7673376]
授权:这是使用JWT的最常见方案。一旦用户登录,每个后续请求...
信息交换:JSON Web令牌是在各方之间安全传输信息的好方法。...
** JWT令牌结构 [#y9140a0d]
在紧凑的形式中,JSON Web Tokens由dot(.)分隔的三个部分组...
- Header 头
- Payload 有效载荷
- Signature 签名
JWT通常如下所示:
xxxxx.yyyyy.zzzzz
*** Header 头 [#n3426f42]
标头通常由两部分组成:令牌的类型,即JWT,以及正在使用的签...
例如:
#codeprettify{{
{
"alg": "HS256",
"typ": "JWT"
}
}}
然后,这个JSON被编码为Base64Url,形成JWT的第一部分。
*** Payload 有效载荷 [#k7ead102]
Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数...
#codeprettify{{
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
}}
除了官方字段,你还可以在这个部分定义私有字段,下面就是一...
#codeprettify{{
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
}}
注意,JWT 默认是不加密的,任何人都可以读到,所以不要把秘...
*** Signature 签名 [#ad092971]
Signature 部分是对前两部分的签名,防止数据篡改。
首先,需要指定一个密钥(secret)。这个密钥只有服务器才知...
#codeprettify{{
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
}}
签名用于验证消息在此过程中未被更改,并且,在使用私钥签名...
可以使用下面的 Debugger 来解码,验证和生成JWT
https://jwt.io/
&ref(netcore_jwt1.jpg);
* JWT的读取和写入 [#db2b9ee3]
** 写入 [#kccc6d3a]
#codeprettify{{
var claims = new Claim[] {
new Claim(ClaimTypes.Name, "user01"),
new Claim(ClaimTypes.Role, "ROLE_NORMAL"),
new Claim("UserID", 100),
};
//对称秘钥
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes...
//签名证书(秘钥,加密算法)
var creds = new SigningCredentials(key, SecurityAlgorithm...
//生成token [注意]需要nuget添加Microsoft.AspNetCore.Auth...
var token = new JwtSecurityToken("API", "http://localhost...
string userToken = new JwtSecurityTokenHandler().WriteTok...
}}
** 读取 [#md4885b0]
#codeprettify{{
ClaimsPrincipal principal = HttpContext.Current.User as C...
if (null != principal)
{
foreach (Claim claim in principal.Claims)
{
Response.Write("CLAIM TYPE: " + claim.Type + "; CLA...
}
}
}}
#hr();
コメント:
#comment_kcaptcha
終了行:
[[ASP.NET Core Web]]
&color(red){※This article is based on .NET 7};
#contents
* 概要 [#kd0a4304]
** 什么是JWT [#k677d8a4]
JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。
JWT的官网地址:
https://jwt.io/
通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT令牌在a...
JWT中包含了身份认证必须的参数以及用户自定义的参数,JWT可...
** JSON Web令牌应用场景 [#n7673376]
授权:这是使用JWT的最常见方案。一旦用户登录,每个后续请求...
信息交换:JSON Web令牌是在各方之间安全传输信息的好方法。...
** JWT令牌结构 [#y9140a0d]
在紧凑的形式中,JSON Web Tokens由dot(.)分隔的三个部分组...
- Header 头
- Payload 有效载荷
- Signature 签名
JWT通常如下所示:
xxxxx.yyyyy.zzzzz
*** Header 头 [#n3426f42]
标头通常由两部分组成:令牌的类型,即JWT,以及正在使用的签...
例如:
#codeprettify{{
{
"alg": "HS256",
"typ": "JWT"
}
}}
然后,这个JSON被编码为Base64Url,形成JWT的第一部分。
*** Payload 有效载荷 [#k7ead102]
Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数...
#codeprettify{{
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
}}
除了官方字段,你还可以在这个部分定义私有字段,下面就是一...
#codeprettify{{
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
}}
注意,JWT 默认是不加密的,任何人都可以读到,所以不要把秘...
*** Signature 签名 [#ad092971]
Signature 部分是对前两部分的签名,防止数据篡改。
首先,需要指定一个密钥(secret)。这个密钥只有服务器才知...
#codeprettify{{
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
}}
签名用于验证消息在此过程中未被更改,并且,在使用私钥签名...
可以使用下面的 Debugger 来解码,验证和生成JWT
https://jwt.io/
&ref(netcore_jwt1.jpg);
* JWT的读取和写入 [#db2b9ee3]
** 写入 [#kccc6d3a]
#codeprettify{{
var claims = new Claim[] {
new Claim(ClaimTypes.Name, "user01"),
new Claim(ClaimTypes.Role, "ROLE_NORMAL"),
new Claim("UserID", 100),
};
//对称秘钥
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes...
//签名证书(秘钥,加密算法)
var creds = new SigningCredentials(key, SecurityAlgorithm...
//生成token [注意]需要nuget添加Microsoft.AspNetCore.Auth...
var token = new JwtSecurityToken("API", "http://localhost...
string userToken = new JwtSecurityTokenHandler().WriteTok...
}}
** 读取 [#md4885b0]
#codeprettify{{
ClaimsPrincipal principal = HttpContext.Current.User as C...
if (null != principal)
{
foreach (Claim claim in principal.Claims)
{
Response.Write("CLAIM TYPE: " + claim.Type + "; CLA...
}
}
}}
#hr();
コメント:
#comment_kcaptcha
ページ名: