API 未获取 oAuth2 令牌
Posted
技术标签:
【中文标题】API 未获取 oAuth2 令牌【英文标题】:oAuth2 Token not picked up by API 【发布时间】:2017-04-04 13:40:33 【问题描述】:不久前我做了一个项目,使用 oAuth2 和 OpenID 进行访问控制,我设法让它工作得很好,但现在我开始了一个新项目,我必须再次实施令牌验证。我使用了与上一个项目相同的模式、设置、配置和技术(90% 的设置相同),并且我的令牌被正确填充并作为 HTTP 请求的标头传递给我的 API:
旧
翻译: "iss": "https://localhost", "aud": "https://localhost/resources", “exp”:1479710870, “nbf”:1479707270, “client_id”:“隐式”, “范围”: [ “开放”, “轮廓”, “角色”, “网络” ], “子”:“55dad807b33c2c2648342757”, “auth_time”:1479705621, “idp”:“idsrv”, “角色”:“管理员”, “功能”: [ “表单视图”, “表格添加”, “... 等等” ], “amr”:[ “密码” ]
新的
翻译: "iss": "https://localhost", "aud": "https://localhost/resources", “exp”:1479711165, “nbf”:1479707565, “client_id”:“隐式”, “范围”: [ “开放”, “轮廓”, “角色”, “网络” ], “子”:“系统”, “auth_time”:1479707564, “idp”:“idsrv”, "role": "系统用户", “功能”: [ "ADD_BUSS_UNIT", "ADD_EMP", “... 等等” ], “amr”:[ “密码” ]
(缓存控件在新项目中是额外的,这会导致问题吗?似乎不太可能?)
无论如何,由于某种原因,当我到达控制器时,HttpContext.Current.User.Identity 被填充为 System.Security.Principal.WindowsIdentity 而不是我希望看到的 ClaimsIdentity:
旧
新的
这两个项目最大的不同在于,新项目运行在 Windows Server 2008 R2 上,旧项目运行在 Windows7 上。 IIS 版本相同,IIS 中的设置也相同,正如我提到的,大多数其他设置都是相同的。
我的 API 启动类:
public void Configuration(IAppBuilder app)
// Allow all origins
app.UseCors(CorsOptions.AllowAll);
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate return true; ;
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
Authority = Constants.STSAuthEndPoint,
RoleClaimType = "role",
RequiredScopes = new[] "web"
);
我对它为什么不起作用的一些想法:
-
模拟 - IIS 或 Windows Server 是否正在模拟用户?我检查了两台服务器之间的设置,一切看起来都一样。
SUB 值 - 我在新项目中使用用户名,在前一个项目中使用 Guid 格式 ID。我记得看到 sub 值是两个值的组合,但我不知道这是否会导致问题?
角色 - 角色名称中的空格是否会导致问题?
登录屏幕 - 我为新项目创建了一个新的登录屏幕,它比前一个项目更加定制化,但登录正常,API 只是不选择该用户。
我有很多额外的信息可以提供,但我不想把帖子写得太长,所以如果需要更多信息,请告诉我。
感谢您提供的任何帮助。
【问题讨论】:
您的新应用程序是否在启用Windows Authentication
的情况下运行?
不是,不是。我禁用了除匿名之外的所有身份验证,但我认为我发现了问题,将在一分钟内更新答案。
【参考方案1】:
看起来这是一个红鲱鱼,实际问题是我的 OWIN Startup 类没有触发。我发现了这一点,因为我试图进入我的 Startup 课程但不能,所以我阅读了一些内容并找到了以下文章:
OwinStartup not firing
我使用 nuget 在项目上安装了 Microsoft.Owin.Host.SystemWeb 包,瞧!看起来它现在正在工作!
【讨论】:
以上是关于API 未获取 oAuth2 令牌的主要内容,如果未能解决你的问题,请参考以下文章
无法获取 Google Analytics API 的 oAuth2 访问令牌
用户在springboot中调用注册休息API时如何获取oAuth2访问令牌?
如何使用 Spring Security 5 和 OAuth2 Client 获取刷新令牌并进行 API 调用?
ExpressJS Node.js Angular 错误:获取 OAuth2 API 授权令牌时出现 getaddrinfo ENOTFOUND