C# 如何在服务器计算机的Web API中验证WPF应用程序Azure令牌
我有一个WPF应用程序,它将通过Azure AD进行身份验证并返回一个令牌。在调用方法Web API时,我们将此令牌传递给服务器计算机。在服务器中,我们需要验证令牌是否有效。你能帮我查一下服务器上的验证码吗C# 如何在服务器计算机的Web API中验证WPF应用程序Azure令牌,c#,azure,azure-active-directory,C#,Azure,Azure Active Directory,我有一个WPF应用程序,它将通过Azure AD进行身份验证并返回一个令牌。在调用方法Web API时,我们将此令牌传递给服务器计算机。在服务器中,我们需要验证令牌是否有效。你能帮我查一下服务器上的验证码吗 string aadInstance = service.SelectSingleNode("AADInstance").InnerText; string tenant = service.SelectSingleNode("
string aadInstance = service.SelectSingleNode("AADInstance").InnerText;
string tenant = service.SelectSingleNode("Tenant").InnerText;
string clientId = service.SelectSingleNode("ClientId").InnerText;
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
authContext = new AuthenticationContext(authority, new FileCache());
Uri redirectUri = new Uri(service.SelectSingleNode("RedirectUri").InnerText);
string resourceId = service.SelectSingleNode("ResourceId").InnerText;
AuthenticationResult result = null;
try
{
result = await authContext.AcquireTokenSilentAsync(resourceId, clientId);
}
catch (AdalException ex)
{
if (ex.ErrorCode == AdalError.UserInteractionRequired || ex.ErrorCode == AdalError.FailedToAcquireTokenSilently)
{
result = await authContext.AcquireTokenAsync(resourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always));
}
}
tocken = result.AccessToken;
看起来您正试图从后端代码验证您的令牌 获得令牌后,您可以使用
System.IdentityModel.Tokens.Jwt
numget包验证令牌。这样做
转到nuget package manager
并浏览System.IdentityModel.Tokens.Jwt
将此引用添加到项目中。请参见下面的屏幕截图:
添加以下引用:
使用System.IdentityModel.Tokens.Jwt;
使用Microsoft.IdentityModel.Tokens;
设置包后,请设置以下代码:
令牌验证方法:
private bool ValidateToken(字符串yourToken)
{
var tokenHandler=new JwtSecurityTokenHandler();
var validationParameters=GetValidationParameters();
SecurityToken validatedToken;
IPrincipal principal=tokenHandler.ValidateToken(您的令牌,validationParameters,out validatedToken);
返回true;
}
您的令牌验证参数:
static string key=“401B09EAB3C3013D4CA54922BB802BEC8FD5318192B0A75F201D8B3727429090FB337591ABD3E4453B954555B7A0812E1081C39B740293F765EAE731F5A65ED1”;
私有静态TokenValidationParameters GetValidationParameters()
{
返回新的TokenValidationParameters()
{
ValidateLifetime=false,//因为生成的令牌中没有过期
ValidateAudience=false,//因为生成的令牌中没有audiance
ValidateIsuer=false,//因为生成的令牌中没有颁发者
validisuser=“样本”,
validudience=“样本”,
IssuerSigningKey=new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key))//与生成令牌的密钥相同
};
}
注意:连接所有参考和测试。有关更多详细信息,请参阅。如果您有任何疑问,请随时与我们分享。
谢谢,快乐编码
看起来您正试图从后端代码验证您的令牌 获得令牌后,您可以使用
System.IdentityModel.Tokens.Jwt
numget包验证令牌。这样做
转到nuget package manager
并浏览System.IdentityModel.Tokens.Jwt
将此引用添加到项目中。请参见下面的屏幕截图:
添加以下引用:
使用System.IdentityModel.Tokens.Jwt;
使用Microsoft.IdentityModel.Tokens;
设置包后,请设置以下代码:
令牌验证方法:
private bool ValidateToken(字符串yourToken)
{
var tokenHandler=new JwtSecurityTokenHandler();
var validationParameters=GetValidationParameters();
SecurityToken validatedToken;
IPrincipal principal=tokenHandler.ValidateToken(您的令牌,validationParameters,out validatedToken);
返回true;
}
您的令牌验证参数:
static string key=“401B09EAB3C3013D4CA54922BB802BEC8FD5318192B0A75F201D8B3727429090FB337591ABD3E4453B954555B7A0812E1081C39B740293F765EAE731F5A65ED1”;
私有静态TokenValidationParameters GetValidationParameters()
{
返回新的TokenValidationParameters()
{
ValidateLifetime=false,//因为生成的令牌中没有过期
ValidateAudience=false,//因为生成的令牌中没有audiance
ValidateIsuer=false,//因为生成的令牌中没有颁发者
validisuser=“样本”,
validudience=“样本”,
IssuerSigningKey=new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key))//与生成令牌的密钥相同
};
}
注意:连接所有参考和测试。有关更多详细信息,请参阅。如果您有任何疑问,请随时与我们分享。
谢谢,快乐编码
{
字符串stsDiscoveryEndpoint=”https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager configManager=新的ConfigurationManager(stsDiscoveryEndpoint,新的OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config=configManager.GetConfigurationAsync().Result;
TokenValidationParameters validationParameters=新的TokenValidationParameters
{
ValidateAudience=false,
validateisuer=false,
IssuerSigningKeys=config.SigningKeys,//.net core将其称为“IssuerSigningKeys”和“SigningKeys”
ValidateLifetime=true
};
JwtSecurityTokenHandler-tokendHandler=新的JwtSecurityTokenHandler();
SecurityToken jwt;
var result=tokendHandler.ValidateToken(令牌、validationParameters、out jwt);
将jwt作为JwtSecurityToken返回;
}
{
字符串stsDiscoveryEndpoint=”https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager configManager=新的ConfigurationManager(stsDiscoveryEndpoint,新的OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config=configManager.GetConfigurationAsync().Result;
TokenValidationParameters vali
{
string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
TokenValidationParameters validationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidateIssuer = false,
IssuerSigningKeys = config.SigningKeys, //.net core calls it "IssuerSigningKeys" and "SigningKeys"
ValidateLifetime = true
};
JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();
SecurityToken jwt;
var result = tokendHandler.ValidateToken(token, validationParameters, out jwt);
return jwt as JwtSecurityToken;
}