如何证明 JWT 是不是有效并且是不是真的来自 Microsoft?
Posted
技术标签:
【中文标题】如何证明 JWT 是不是有效并且是不是真的来自 Microsoft?【英文标题】:How to prove if a JWT is valid and is really from Microsoft?如何证明 JWT 是否有效并且是否真的来自 Microsoft? 【发布时间】:2021-06-13 13:48:17 【问题描述】:客户端应用程序正在从 Microsoft 获取 JWT,并将其发送到我的 API。它工作正常,但我的 API 如何知道令牌是否真的来自 Microsaft 以及它是否有效?
这是客户端获取令牌的方式:
string ClientID = "xxx";
string TenantID = "yyy";
IPublicClientApplication pca = PublicClientApplicationBuilder
.Create(ClientID)
.WithAuthority(AzureCloudInstance.AzurePublic, TenantID)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
string[] scopes = "user.read" ;
AuthenticationResult result = await pca.AcquireTokenInteractive(scopes).ExecuteAsync();
string JWT = result.AccessToken;
客户端使用 .net framework 4.8 编写
API 使用 .net core 3.1 编写
【问题讨论】:
【参考方案1】:在API项目中,可以安装Microsoft.Identity.Web包。 然后在 Startup.cs 中添加如下代码
services
.AddAuthentication()
.AddMicrosoftIdentityWebApi(options => , options =>
options.ClientId = "Your Azure AD ClientId";
options.TenantId = "Your Azure AD TenantId";
options.Instance = "https://login.microsoftonline.com/";
);
要手动完成,请尝试类似
services.AddAuthentication(options =>
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
).AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
var clientSecret = "";
var clientId = "";
var tenantId = "";
options.TokenValidationParameters = new TokenValidationParameters
ValidAudience = clientId,
ValidIssuer = $"https://sts.windows.net/tenantId/",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(clientSecret)),
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ValidateAudience = true,
ClockSkew = TimeSpan.Zero
;
);
【讨论】:
谢谢!但是,我想在每个发布命令中“手动”检查令牌。你知道这是怎么做到的吗?以上是关于如何证明 JWT 是不是有效并且是不是真的来自 Microsoft?的主要内容,如果未能解决你的问题,请参考以下文章