3

我希望有人可以就此给我建议。

我一直在关注本教程的修改形式thinktecture 身份服务器入门以尝试使用 OpenId Connect 身份验证设置站点。

我有这个设置:

充当身份服务器的 Asp.NET MVC 项目

作为安全网站的 Asp.NET MVC 项目

上述设置运行良好。当有人试图访问安全网站中具有 [Authorise] 属性的控制器时,他们将被重定向到身份服务器进行登录,然后在成功登录后重定向回安全网站。

我现在想在组合中添加一个 web api。我创建了一个 WebApi 项目,但与教程中使用“服务帐户”将其称为服务器端不同,我想以当前登录用户的身份从受保护的网站将其称为客户端(JQuery)。

我了解我需要在身份验证标头中使用不记名令牌。

我的问题是:如何在客户端获取当前登录用户的不记名令牌,以便设置标头?(用户已经登录。)

非常感谢您的帮助

4

2 回答 2

0

如果您在 Identity Server 应用程序中使用 .Net Framework 4.5.1,您可能已经将 TokenEndpointPath 定义为“/Token”。查看 App_Start 文件夹中的 Startup.Auth.cs 文件。

调用客户端可以通过向端点发送有效的用户名/密码来从 /Token 端点检索承载令牌。我创建了一个简单的 codepen,以使用新的 Windows Identity Foundation 基础结构来试验我自己的 ASP.NET Web Api 2 项目。您可能会在其中找到一些有用的东西:

http://codepen.io/randomfactor/pen/bNpBoP?editors=101

    # THIS IS CoffeeScript (because we are not barbarians)
    # start by trying to get an access token
    $.ajax {
      type: 'POST'
      url: "#{appUrl}/Token"
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
      data: {
        grant_type: 'password'
        username: $('#login-name').val()
        password: $('#password').val()
      }
    }
    .then (data) ->

请注意,根据定义,codepen 正在向您的 Identity Server 项目发出跨域资源共享请求。要使其工作,您需要修改您的 Identity Server 项目以支持 CORS,如 codepen 上的注释中所述。

如果您愿意将您的 Identity Server 与受保护的网站和 .Net 4.5.1 下的 Web Api 项目结合起来(强烈推荐!),它将简化一些事情并且您不需要 CORS 修改。

于 2014-12-19T00:15:49.010 回答
0

我想你可以将它们注入到 _Layout.cshtml 中的 DOM 中。在 send 之前初始化一些 OidcClient 和AJAX会更好。你怎么看,@PinpointTownes?

于 2017-12-29T11:11:59.347 回答