【发布时间】:2019-09-10 16:48:25
【问题描述】:
我有使用 JWT 的 Asp.Net 4.6 webAPI 应用程序。我正在使用Okta authorization code flow/token 交换来获取令牌。然后我在所有请求中使用令牌。使用我的 Okta 开发端点时一切正常,但是当我使用我们的生产 Okta 端点时,经过身份验证的请求失败。授权和代码/令牌交换工作正常,但是当我使用 [Authorize] 属性向我的 WebApi 控制器请求数据时,请求似乎没有返回任何内容,甚至是错误。事实上,chrome 中的请求表明请求永远不会完成。 (尽管预检 OPTIONS 请求确实得到了 200)。我还可以在 Wireshark 中看到请求,并且从未发送过响应。
最明显的答案是我的代码或生产 Okta 端点上存在配置问题,导致 Authorize 属性静默失败。但我主要担心的是我似乎找不到调试它的方法。我尝试从 Authorize 属性继承,并覆盖所有方法以查看是否可以通过在这些方法中放置断点来确定任何内容,但 OnAuthorization、IsAuthorized、HandleUnauthorizedRequest 等方法似乎永远不会被调用。
- 在那里进行调试的最佳方法是什么?是否有一个 Asp.Net 事件我可以挂钩以查看正在发送/返回给 Okta 以验证传入令牌的内容?
- 为什么会静默失败?这似乎是一个设计上应该冒泡的错误。
【问题讨论】:
-
如果请求正在授权,这似乎表明令牌有效并且已正确解密。我会检查并确保客户实际上发送了您认为应该在索赔中发送的内容。连接 Fiddler 或其他 HTTP 代理以捕获请求捕获令牌并将其粘贴到 jwt.io 以查看您在令牌数据中获得的内容。
-
请求未授权。客户端通过重定向到托管的 Okta 页面进行身份验证,该页面对用户进行身份验证并使用代码重定向回来,然后可以使用该代码交换令牌。我已经验证了返回的令牌是好的。当客户端尝试向使用 Authorize 属性的我的后端发出请求时,就会出现问题。我用wireshark查看了客户端请求,它确实有Bearer标头并且看起来是正确的。我尝试将该令牌粘贴到 jwt.io 以验证它我猜。但它适用于 dev oka 帐户,所以...
标签: c# asp.net asp.net-web-api jwt okta