根据Azure Bot Service Authentication提供的信息,我尝试使用通过OpenID公开的公钥验证JWT令牌:
但directline.botframework.com对话JWT令牌中的密钥不在这两个中,请参阅下面的错误:
“IDX10501:签名验证失败。无法匹配密钥:KID:'....”
ConfigurationManager<OpenIdConnectConfiguration> configurationManager =
new ConfigurationManager<OpenIdConnectConfiguration>(openIdMetadataAddress, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConnectConfiguration = await configurationManager.GetConfigurationAsync(CancellationToken.None);
TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = authorizationDomain,
ValidateAudience = false,
IssuerSigningKeys = openIdConnectConfiguration.SigningKeys
};
try
{
JwtSecurityTokenHandler jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
jwtSecurityTokenHandler.ValidateToken(jwt, tokenValidationParameters, out _);
return true;
}
catch (SecurityTokenException)
{
return false;
}
JWT令牌示例(当您在bot框架中启动directline对话时生成):
ew0KICAiYWxnIjogIlJTMjU2IiwNCiAgImtpZCI6ICJBT08tZXhGd2puR3lDTEJhOTgwVkxOME1tUTgiLA0KICAieDV0IjogIkFPTy1leEZ3am5HeUNMQmE5ODBWTE4wTW1ROCIsDQogICJ0eXAiOiAiSldUIg0KfQ.ew0KICAiYm90IjogImRldi1tYXJpdXNpbXBvLW5lcnRlc3Rib3QwbmVnNC1ib3QiLA0KICAic2l0ZSI6ICJ0RVRMM2ZES3ZGdyIsDQogICJjb252IjogIkZPeXRUdThrTzVRNFVOZmxpS3pSMlgtaCIsDQogICJuYmYiOiAxNTc1MzcxNDYzLA0KICAiZXhwIjogMTU3NTM3NTA2MywNCiAgImlzcyI6ICJodHRwczovL2RpcmVjdGxpbmUuYm90ZnJhbWV3b3JrLmNvbS8iLA0KICAiYXVkIjogImh0dHBzOi8vZGlyZWN0bGluZS5ib3RmcmFtZXdvcmsuY29tLyINCn0.IMKMdlart3nEg6iegVvz5MQ86cp36nLXK1mIT0a7xiOmRLMMlvUjqHA9d2EJUovYAML4RGAapP7BWYgU9CnYtL9dXrJwj_JNacJDov18zUTzbyfzcL8goFJG_PJRjJZbN7ZZZdp1lIis9DbrL56HQBgiBuW4BGhNhgmBauh8SFOIvWfhOYmWoxyfI7Uzkd_5LTVdeL7Lyqi5Ulxzf8UsuDI372US6dA0LZ0BZMCU-M6S9bYFCSBwrvjD5uZOYJ8drCuXnuOl1rxRP_kfMVi-kodWZ84-puo5JYt5QhpptP6vuBYO5-6fW359zJ1csUk-xWFlOH88dh09lpJDbcXgXg
using (var client = new DirectLineClient(secretKey))
{
var conversation = await client.Conversations.StartConversationAsync();
var token = conversation.Token;
}
UPD:我不确定directline.botframework.com对话JWT令牌中的密钥到底是什么。如果您可以为我提供过期的令牌,应该可以找到如何验证它。
元数据终结点:
https://login.microsoftonline.com/botframework.com/v2.0/.well-known/openid-配置
从
Web应用程序bot
的配置
中获取microsoft-app-id
和microsoft-app-password
。
POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=MICROSOFT-APP-ID&client_secret=MICROSOFT-APP-PASSWORD&scope=https%3A%2F%2Fapi.botframework.com%2F.default
提出验证令牌的值。
3.1.元数据endpoint
与发行人相同。
https://api.botframework.com
验证令牌并获取从令牌解码的
ClaimSprinCipal
对象。
static async Task Main(string[] args)
{
var jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkJCOENlRlZxeWFHckdOdWVoSklpTDRkZmp6dyIsImtpZCI6IkJCOENlRlZxeWFHckdOdWVoSklpTDRkZmp6dyJ9.eyJhdWQiOiJodHRwczovL2FwaS5ib3RmcmFtZXdvcmsuY29tIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvZDZkNDk0MjAtZjM5Yi00ZGY3LWExZGMtZDU5YTkzNTg3MWRiLyIsImlhdCI6MTU3NTkyMDQwMSwibmJmIjoxNTc1OTIwNDAxLCJleHAiOjE1NzU5MjQzMDEsImFpbyI6IjQyVmdZRGhjMDMwNGFrdENBcXZMYTM2aFJTTExBUT09IiwiYXBwaWQiOiI0MmY5NGM0MS0wYmMwLTRiN2MtODc2MC1jOGI1NTRhYjE2NDIiLCJhcHBpZGFjciI6IjEiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC9kNmQ0OTQyMC1mMzliLTRkZjctYTFkYy1kNTlhOTM1ODcxZGIvIiwidGlkIjoiZDZkNDk0MjAtZjM5Yi00ZGY3LWExZGMtZDU5YTkzNTg3MWRiIiwidXRpIjoiMWpvWi1TUng5a1MwdUxucVYyOE5BQSIsInZlciI6IjEuMCJ9.WWxIinArkAJgVyAUMu6UJvCy9OJ-B2KGxpT-t9wdRF9qlpw00GvXXuL0HCpUEIWC0efA3ETF3bBBJVYjcXoKsC6Up2UWzkAgA2O_TZhPkG5Tkm5MT7f_mIdoEVWoddawjv3ec_EUfSq1B_UrQu-05AHMe0n46kN94yUWbsIAv9z6Q_HSuKO6_kSSyGwbnsAbsT2nWqYyE05BstvZUccQrSvR4UdbugKDEDxAixhVvOrFJiLng3pKeSljXUxWte7ETw59X9EuA4WJPURzW-kWPJ8tGIP2Wz6RVDU-D1eCp-DB3o4PxT-t8UTBMjwUJBFqQo-w1GtQasJwcnUKKkBhgA";
var claimsPrincipal = await Authenticate(jwt);
}
public static async Task<ClaimsPrincipal> Authenticate(string jwt)
{
var openIdMetadataAddress = "https://login.microsoftonline.com/botframework.com/v2.0/.well-known/openid-configuration";
var issuer = "https://sts.windows.net/d6d49420-f39b-4df7-a1dc-d59a935871db/";
var audience = "https://api.botframework.com";
var configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
openIdMetadataAddress,
new OpenIdConnectConfigurationRetriever());
var openIdConnectConfiguration = await configurationManager.GetConfigurationAsync();
var tokenValidationParameters = new TokenValidationParameters
{
// Updated validation parameters
ValidIssuer = issuer,
ValidAudience = audience,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKeys = openIdConnectConfiguration.SigningKeys
};
try
{
var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
var claimsPrincipal = jwtSecurityTokenHandler.ValidateToken(jwt, tokenValidationParameters, out _);
return claimsPrincipal;
}
catch (SecurityTokenException e)
{
return null;
}
}
我正在阅读JWT的示例文件夹,我有点不确定验证令牌的工作原理。 这里直接使用“mySigningKey”在中签名 现在,对我来说,未解析就不那么清楚了: 是为了验证客户端返回的令牌字符串的签名是否有效,您是否需要 解码声明(在&MyCustomClaims{}中完成) 使用token.valid验证解码声明的签名部分对“令牌中包含的pub密钥”是否有效。 但这个例子只是解码密钥,通过“魔术”返回的
我试图找到电报的Api密钥,但我找不到它。我在网站上哪里可以找到它?如果我使用Api Id,我会在C#控制台应用程序中得到错误。
问题内容: 几年前,我在维护的Linux服务器上安装了Apache 2.2x和PHP 5.3.1。我使用.tar.gz并按照指示进行构建(而不是rpm和您拥有什么)。一切都很好。 今天,我需要安装它,它看起来像一个PHP库。我完成了所有步骤以进行安装,并在其中找到ibm_db2.so。 最好的收获是最后一步是配置php.ini,但是我的系统上没有php.ini。恐怖的恐怖。PHP可以正常工作,当然
后端服务器有一个endpoint,在ping时提供JSON响应,并受Apigee边缘代理的保护。目前,该endpoint没有安全性,我们希望为发出请求的所有客户端实现仅承载令牌身份验证。所有向API发出请求的客户端都将在授权承载中发送JWT令牌,Apigee Edge将用于验证JWT令牌。 我如何使用keydape生成这个JWT令牌? 此外,Apigee还需要一个JWT令牌来源的公钥(签署JWT令
问题内容: 我正在按照此站点上的MVC单元测试说明进行操作,但找不到用于注释的jar 。有人知道罐子在哪里吗? 问题答案: 通过Maven: 或从项目主页:http://code.google.com/p/atinject/ 另外,此MvnRepository.com页面提供了其他构建工具(如Ivy,Gradle等)的必要配置。
背景 我遵循了OKTA的这篇教程:https://developer.okta.com/quickstart/#/ios/dotnet/aspnetcore 从Xamarin实现了开源Appauth.ios组件的一个版本,以便能够在Xamarin.ios项目中使用它。(工程) 在使用https://JWT.io检查JWT令牌后,我找到了用于对令牌签名的签名公钥的 然后我转到我帐户的openid-c