gpt4 book ai didi

c# - 在控制台应用程序中验证 Azure AD 持有者 token

转载 作者:行者123 更新时间:2023-11-30 21:47:11 25 4
gpt4 key购买 nike

您可以找到大量如何使用 JWT 承载身份验证通过 Azure AD 保护 ASP.Net 应用程序的示例。只需在启动中添加一些有关 AAD 的信息即可,例如:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = "https://login.windows.net/...",
Audience = "...",
});

app.UseMvc();
}

这些示例没有任何问题,所有 token 验证魔法都发生在幕后,您不必关心它。但实际上我想知道如何验证除 ASP.Net 之外的 Azure AD 承载 token ,例如在控制台应用程序中。

在控制台应用程序中,我期望类似以下内容:

public static void Main(string[] args)
{
string token = "...";

JwtSecurityToken validatedJwtToken = validateJwtToken(token);
}

private static JwtSecurityToken validateJwtToken(string token)
{
JwtSecurityToken jwtToken = new JwtSecurityToken(token)

//
// how to validate the AAD token?!
//

if(/* is valid */)
{
return jwtToken;
}
else
{
return null;
}
}

不幸的是,我还没有找到一个有效的例子,但我无法想象这个问题没有简单的解决方案。非常感谢任何建议!

最佳答案

找到了一个解决方案 - 基于 https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation :

private const string AUDIENCE = "<GUID of your Audience>";
private const string TENANT = "<GUID of your Tenant>";

private static async Task<SecurityToken> validateJwtTokenAsync(string token)
{
// Build URL based on your AAD-TenantId
var stsDiscoveryEndpoint = String.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}/.well-known/openid-configuration", TENANT);

// Get tenant information that's used to validate incoming jwt tokens
var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint);

// Get Config from AAD:
var config = await configManager.GetConfigurationAsync();

// Validate token:
var tokenHandler = new JwtSecurityTokenHandler();

var validationParameters = new TokenValidationParameters
{
ValidAudience = AUDIENCE,
ValidIssuer = config.Issuer,
IssuerSigningTokens = config.SigningTokens,
CertificateValidator = X509CertificateValidator.ChainTrust,
};

var validatedToken = (SecurityToken)new JwtSecurityToken();

// Throws an Exception as the token is invalid (expired, invalid-formatted, etc.)
tokenHandler.ValidateToken(token, validationParameters, out validatedToken);

return validatedToken;
}

这只是原始基础知识,并且仅使用 net452 进行了测试。查看上面的链接以了解更多用法(例如,将 SigningToken 缓存一段时间)。

关于c# - 在控制台应用程序中验证 Azure AD 持有者 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com