我正在使用更新的Azure Mobile Apps
以及Google,Microsoft,Twitter和Facebook等身份验证提供程序对我的网站的用户进行身份验证。所有这一切都运行良好,并通过对我的Azure Mobile App
实例进行身份验证后,我得到一个代表经过身份验证的用户的有效JWT
令牌。这个令牌我正在转向并发送一个Authentication Bearer
令牌给服务器以验证对另一个ASP.NET Core
API服务的请求。所有这一切都工作得很好。如何获取并使用适当的签名密钥进行Azure移动应用程序身份验证?
问题是在服务器上使用正确的signing key
值验证JWT
值。对于测试 - 如果我使用正确的算法HS256
将我的JWT
令牌粘贴到https://jwt.io/和从我的密钥Azure
粘贴到我的密钥我仍无法超过“无效签名”错误。在同一地区,如果我把我的ASP.NET Core API
服务,具有app.UseJwtBearerAuthentication
从Microsoft.AspNetCore.Authentication.JwtBearer
配置的I得到相同的401错误回从端点载明下列:
401未经授权:承载错误=“INVALID_TOKEN”,ERROR_DESCRIPTION =“的 签名无效”
根据Azure Mobile Apps offline WEBSITE_AUTH_SIGNING_KEY,我应该使用WEBSITE_AUTH_SIGNING_KEY
从https://[Azure-Mobile-Site-Here].scm.azurewebsites.net/Env.cshtml我得到的价值,并试图利用它的10种从星期日为IssuerSigningKey
服务器上,但其他一些网站没有成功。我总是得到同样的错误。
这是我在服务器上的配置。我试图尽可能缩小它的范围,反编译代码并只打开最小标志来验证。我无法得到任何答案。
private void ConfigureAuth(IApplicationBuilder app)
{
//Didn't work attempt #1
//byte[] keyBytes = Encoding.UTF8.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606");
//if (keyBytes.Length < 64)
//{
// Array.Resize(ref keyBytes, 64);
//}
//Didn't work attempt #2
//byte[] keyBytes = _UTF8Encoder.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606");
//Didn't work attempt #3
//var keyAsBytes = Convert.FromBase64String("975BE84E150ABlahBlahBlahA2527E1AAC80606");
//Didn't work attempt #4
//var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("975BE84E150ABlahBlahBlahA2527E1AAC80606"));
var signingKey = new SymmetricSecurityKey(keyBytes);
var tokenValidationParameters = new TokenValidationParameters
{
RequireExpirationTime = false,
RequireSignedTokens = false,
SaveSigninToken = false,
ValidateActor = false,
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = false,
//The signing key must match!
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
};
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = tokenValidationParameters
});
}
作为一个说明上面,我已经试图使ValidateIssuerSigningKey = false
尝试并绕过了这一切,它没有工作。我仍然得到同样的错误;这就像这一点对结果没有影响。
我感到迷茫,并在这一点上猜测,因为我甚至不确定WEBSITE_AUTH_SIGNING_KEY
是否是正确的signingKey
,如果它不是我正在旋转我的轮子。
用于为Azure Mobile App
实例生成JWT
令牌的合适secret/signing key
是什么,以及如何在服务器上的中间件配置中正确地合并它以验证令牌?
是的,谢谢!我无法了解它是如何编码的,因此也是猜测。感谢您的帮助。从这里工作的C#代码示例:http://stackoverflow.com/a/724905/410937 – atconway