【发布时间】:2021-06-28 09:30:40
【问题描述】:
我有一个类似于 Microsoft 默认模板的 Asp.netCoreWebApplication->ASP.netCoreWithReact.js 的应用程序。
在这个反应客户端将被包装在一个 .netcore 项目中。所有的 UI 页面都将由 React 提供。 .Net 核心后端将仅用于 API。
现在我已经实现了 IdentityServer4 并且能够在这个端点生成令牌, http://localhost:60739/token
从反应客户端,点击登录按钮,我可以对 http://localhost:60739/token 进行 API 调用,并可以使用授权类型密码流生成令牌。但我无法使用该令牌验证我的 api 端点
以下是我在身份服务器解决方案中的客户端定义,
new Client
{
ClientName = "Resource Owner Flow",
ClientId = "resource_owner_flow",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
ClientSecrets =
{
new Secret("resource_owner_flow_secret".Sha256())
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.OfflineAccess
},
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.ReUse,
//AccessTokenLifetime = 60,
RefreshTokenExpiration = TokenExpiration.Absolute,
AbsoluteRefreshTokenLifetime = 300
}
下面是我用来引用身份服务器的一段代码,
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:60739";
options.TokenValidationParameters.ValidateAudience = false;
options.TokenValidationParameters.ValidateIssuer = false;
options.TokenValidationParameters.ValidateIssuerSigningKey = false;
options.TokenValidationParameters.ValidateLifetime = false;
options.TokenValidationParameters.ValidateTokenReplay = false;
options.IncludeErrorDetails = true;
});
我无法成功访问受保护的 api 资源?有什么想法吗?
如果我使用标头中的令牌调用 http://localhost:57102/api/Home/GetSomeProtectedData,我会收到 500 内部服务器错误。如果我删除受保护资源上的授权属性,它工作正常。
以下是邮递员截图,
下面是用于创建令牌的日志,
IdentityServer4.Validation.TokenRequestValidator:信息:令牌请求验证成功,
{
"ClientId": "resource_owner",
"ClientName": "Resource Owner",
"GrantType": "password",
"Scopes": "openid",
"AuthorizationCode": "********",
"RefreshToken": "********",
"UserName": "superadmin@gmail.com",
"Raw": {
"username": "superadmin@gmail.com",
"password": "***REDACTED***",
"grant_type": "password",
"scope": "openid",
"response_type": "token"
}
}
但是当我请求标头中带有令牌的受保护 API 资源时,我收到 500 个内部服务器错误并创建了日志。
【问题讨论】:
-
出现问题时的身份记录。你能提供日志吗?
-
嗨 @MistGun 我在哪里可以看到这些日志?
-
对于令牌生成,它正在添加一些日志,但是当我请求一些 api 资源时,ntng 正在记录。
-
@Mahesh 出于测试目的,将 IdentityModelEventSource.ShowPII = true 代码行添加到 Startup.cs 中的 ConfigureServices 方法中,启动项目并查看 Visual Studio 中的输出控制台,您将能够阅读该特定请求/异常的日志。与我们分享,我们可以帮助您:)
-
嗨@krazors。当我从身份服务器端点请求创建令牌时,我可以看到上面的日志被生成了。但是,当我在标头中使用令牌从 api 端点请求受保护的 api 资源时,我暗示获得了 500 个内部服务器并且没有创建日志。让我知道是否有任何方法可以调试和查找
标签: c# .net-core identityserver4