我正在使用更新的Azure Mobile Apps
和身份验证提供程序(例如Google,Microsoft,Twitter和Facebook)来对我的网站的用户进行身份验证。所有这些都运行良好,并且在对我的Azure Mobile App
实例进行身份验证后,我获得了一个JWT
代表已身份验证用户的有效令牌。我正在转过头这个令牌,并将其作为Authentication Bearer
令牌发送到服务器,以验证对另一个ASP.NET Core
API服务的请求。所有这一切都很好。
问题是JWT
使用正确的signing key
值在服务器上进行验证。为了进行测试-如果将JWT
令牌带到https://jwt.io/ 并Azure
使用正确的算法粘贴我的秘密密钥,HS256
我仍然无法摆脱“无效签名”错误。在同一地区,如果我把我的ASP.NET Core API
服务已经app.UseJwtBearerAuthentication
从Microsoft.AspNetCore.Authentication.JwtBearer
配置我从端点载明下列同401错误回来:
401未经授权:不记名error =“ invalid_token”,error_description =“签名无效”
据Azure的移动应用离线WEBSITE_AUTH_SIGNING_KEY和其他一些网站,我应该使用WEBSITE_AUTH_SIGNING_KEY
从https://开头[Azure的移动站点,这里] .scm.azurewebsites.net / Env.cshtml我得到的价值,并试图从星期日作为IssuerSigningKey
服务器上的10种方式使用它,但没有成功。我总是得到同样的错误。
这是我在服务器上的配置。我试图尽可能缩小范围,反编译代码,仅打开最小标志进行验证。我什么都做不了。
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
绕过所有这些,但是它没有用。我仍然遇到相同的错误;就像位对结果没有影响。
在这一点上,我感到迷lost和猜测,因为我什至不确定那WEBSITE_AUTH_SIGNING_KEY
是否正确signingKey
,如果不是,那我什么也不做。
secret / signing key
在JWT
为Azure Mobile App
实例生成令牌时,应该使用什么适当的方法?如何将其正确地合并到服务器上的中间件配置中以验证令牌?
WEBSITE_AUTH_SIGNING_KEY是适当的环境变量/应用程序设置。但是,它被编码为十六进制字符串。您需要先对其解码,然后再使用。在Node SDK中,执行此操作的代码如下:
function hexStringToBuffer(hexString) {
var bytes = [];
for (var i = 0; i < hexString.length; i += 2)
bytes.push(parseInt(hexString.substr(i, 2), 16));
return new Buffer(bytes);
}
您只需要将其转换为C#。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句