OpenId Connect,是获取持有者令牌客户端在MVC登录后调用WebApi的最佳方法吗?

问题描述 投票:3回答:2

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

我一直在关注本教程Getting started with thinktecture Identity server的修改形式,尝试使用OpenId Connect身份验证设置站点。

我有这个设置:

作为Identity Server的Asp.NET MVC项目

Asp.NET MVC项目充当安全网站

以上设置工作正常。当有人尝试使用安全网站中的[授权]属性访问控制器时,会将其重定向到身份服务器进行登录,然后在成功登录后重定向回安全网站。

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

我知道我需要在身份验证标头中使用持票令牌。

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

非常感谢您的帮助

asp.net asp.net-web-api2 thinktecture-ident-server bearer-token openid-connect
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修改。


0
投票

我想你可以将它们注入到_Layout.cshtml中的DOM中。最好通过初始化一些OidcClient和AJAX before send。你觉得怎么样,@ PinpointTownes?

© www.soinside.com 2019 - 2024. All rights reserved.