Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在服务器计算机的Web API中验证WPF应用程序Azure令牌_C#_Azure_Azure Active Directory - Fatal编程技术网

C# 如何在服务器计算机的Web API中验证WPF应用程序Azure令牌

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("

我有一个WPF应用程序,它将通过Azure AD进行身份验证并返回一个令牌。在调用方法Web API时,我们将此令牌传递给服务器计算机。在服务器中,我们需要验证令牌是否有效。你能帮我查一下服务器上的验证码吗

                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;
        }