3

我一直在使用 Thinktecture IdentityServer3,并且很想使用它,因为它看起来很棒。但是,我不完全了解如何完成我的流程,这可能相当普遍:

  • 使用隐式流创建身份服务器
  • 设置 MVC 网站
  • 设置单独的 Web API

到目前为止一切顺利,如网站上的示例所示。我现在希望直接使用 AJAX 调用来调用 API,但为此我需要一个访问令牌。必须通过 MVC 站点本身来路由这些似乎是一个很大的开销(同样,在示例中)。

我怎样才能完成这个流程?它会本质上融合 MVC 和 Javascript 客户端示例,还是有更流畅的方式让用户只需登录一次?也许在隐藏字段中发送访问令牌,但它会如何更新?

对理解这一点的任何帮助都会很棒。

4

2 回答 2

3

我设法提出了一个似乎可行的解决方案,但不确定它是否是最佳实践......

  • 在 AJAX/AccessToken 的 MVC 站点上公开一个方法
  • 应使用 Authorize 属性锁定方法,以确保站点的 MVC 部分使用 IdentityServer 正确进行身份验证
  • 方法返回通过 MVC 控制器通过上述调用生成的用户访问令牌
  • 在 JavaScript 中,只需使用此端点获取访问令牌,然后手动调用 API
  • 获取访问令牌的调用应该是安全的,因为它在与 MVC 站点本身相同的域/身份验证模型中

我在这里为任何感兴趣的人提供了一个示例: OIDC-Website

于 2015-06-04T16:32:40.840 回答
1

查看表单发布客户端以查看显式调用的端点。您将需要点击令牌端点来获取您的访问令牌。

您应该能够在 AJAX 调用中使用这些端点,将收到的声明和令牌存储在 cookie 中并从那里获取。

请注意,要更新访问令牌,您还需要存储刷新令牌。隐式流程不允许刷新令牌(您需要使用授权代码流程或混合流程)。

于 2015-05-09T10:05:42.263 回答