3

我正在构建一个内部 Web API(asp.net),我需要将我们的 Okta 身份验证与其集成。我通过 NuGet 安装了 SDK,我可以做一些简单的事情,比如获取用户并查看配置文件。

不过,我真正需要做的是了解我如何获取用户,通过 Okta 对其进行身份验证,然后再验证同一个用户。

这是我在基本概念层面上所拥有的。

var oktaClient = new OktaClient(apiToken: "00vEX-jX3to71axEZ1L3luDfaAPH9d-ZPBV4coG2Ya", baseUri: new Uri(uriString: "https://ourcompany.oktapreview.com"));    

AuthClient authClient = oktaClient.GetAuthClient();    

AuthResponse response = authClient.Authenticate(username: "MyUserName@corp.ourcompany.com", password: "MyPassword");

AuthResponse huh = authClient.GetStatus(response.StateToken);

问题是我的回复不包含 StateToken。它只包含一个 SessionToken。所以,我真正可以使用一些帮助的是我所缺少的。

我浏览了 Okta 音乐商店(https://github.com/okta/okta-music-store)演示,但这似乎没有回答我的问题。也许是因为它是一个较旧的 MVC 4 应用程序并且我正在使用 WebApi,或者只是因为它是一个比我想要完成的更复杂的示例,我不知道。
我也一直在阅读http://developer.okta.com/docs/api/getting_started/design_principles.html,但我仍然没有看到我所缺少的。

4

2 回答 2

0

我建议您看一下这个显示不同身份验证流程的代码示例。

仅当您在登录过程中处于中间状态(例如被提示输入第二个因素)时,您才会获得状态令牌。否则,只有在登录过程成功完成时,您才会获得会话令牌。

我希望这会有所帮助!

于 2016-11-16T22:19:43.920 回答
0

我也一直在努力弄清楚stateToken,在筛选了对同一询问的无数无用回复后,我终于找到了答案:

state——;防止跨站点请求伪造 (CSRF)。可以是任何值。

来源:https ://developer.okta.com/docs/guides/add-an-external-idp/apple/create-authz-url/

我发现我确实可以提供任意字符串,只要它在整个用户的授权流程中保持一致即可。

但是,我仍然不清楚的是,应该多久重新生成一次状态令牌,以及在页面加载之间保持该值的最佳实践是什么。我的假设是它应该是随机生成并存储在会话中的。

更新:我发现这个页面讨论了如何生成状态令牌,似乎很相关。

https://pipedrive.readme.io/docs/marketplace-oauth-authorization-state-parameter

他们推荐的方法(至少对于 php )是:

// Assign to state the hashing of the session ID
$state = hash('sha256', session_id());
于 2020-09-12T15:20:32.573 回答