如何使用.net sdk通过Okta获取StateToken进行基本身份验证?

时间:2016-03-09 17:56:57

标签: asp.net-web-api okta okta-api

我正在构建一个内部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,但我仍然没有看到我所缺少的东西。

2 个答案:

答案 0 :(得分:0)

我建议您查看显示不同身份验证流程的this code sample

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

我希望有所帮助!

答案 1 :(得分: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());