我正在使用更新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 Unauthorized: Bearer error="invalid_token", error_description="签名无效"
根据Azure 移动应用程序离线 WEBSITE_AUTH_SIGNING_KEY和其他一些网站,我应该使用WEBSITE_AUTH_SIGNING_KEY
https ://[Azure-Mobile-Site-Here].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
尝试绕过这一切,但没有成功。我仍然遇到同样的错误;就好像那个位对结果没有影响一样。
在这一点上,我感到迷茫和猜测,因为我什至不确定这WEBSITE_AUTH_SIGNING_KEY
是正确的signingKey
,如果不是,我就白费力气了。
secret / signing key
为实例生成JWT
令牌的正确方法是什么?Azure Mobile App
如何正确地将其合并到服务器上的中间件配置中以验证令牌?