【发布时间】:2018-06-04 14:45:19
【问题描述】:
我在 PHP 中设置了一个身份验证系统,我试图用它来将 JSON Web 令牌发送到客户端应用程序,以便应用程序访问 .net core 2.0 api。因此,身份验证服务器获取用户凭据,如果凭据通过,它会使用我使用 openssl 创建的公钥/私钥对生成令牌。我正在使用此处的过程生成令牌:http://www.phpbuilder.com/articles/application-architecture/security/using-a-json-web-token-in-php.html
我可以用 jwt.io 解码生成的令牌就好了。解码后的版本如下:
{
"typ": "JWT",
"alg": "HS256"
}
{
"iss": "https://crm.advtis.com",
"exp": "2017-12-21 18:14:42",
"aud": "https://localhost:44354",
"data": {
"username": "pwalter@advtis.com",
"role": 1
}
}
我可以从用于对令牌进行编码的私钥文件中输入字符串,jwt.io 表示签名有效。
所以现在我想将令牌连同请求一起发送到我的 API 以获取对该资源的访问权限,该资源在调试时可在 localhost 上找到。以下是与此相关的 .NET 2.0 启动代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<SmartRxDBContext>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Audience = "https://localhost:44354/";
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidIssuer = "https://crm.advtis.com/",
IssuerSigningKey = new X509SecurityKey(new X509Certificate2("C:\\Path\\To\\webOrders-cert-AspNetPubkey.cert"))
};
});
services.AddMvc();
}
引用的路径是我从用于编码 jwt 的私钥生成的 pem 格式的公钥,也是使用 openssl。我试图在 .NET Core 中遵循这个示例 - JWT Validation and Authorization in ASP.NET Core - 但当然整个 auth 中间件配置已在 2.0 中移至 ConfigureServices 方法,并且不再有 AutomaticAuthorization 选项。
一切似乎都很好,但我收到 401 - Unauthorized Bearer error="invalid_token" 错误,当使用标题为 Authorization: Bearer TOKEN 发出请求时,我希望有人能给我一些关于我在哪里的建议可能会出错和/或如何进一步排除故障。
【问题讨论】: