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