我希望有人可以就此提出建议。
我一直在关注本教程Getting started with thinktecture Identity server的修改形式,尝试使用OpenId Connect身份验证设置站点。
我有这个设置:
作为Identity Server的Asp.NET MVC项目
Asp.NET MVC项目充当安全网站
以上设置工作正常。当有人尝试使用安全网站中的[授权]属性访问控制器时,会将其重定向到身份服务器进行登录,然后在成功登录后重定向回安全网站。
我现在想添加一个web api。我已经创建了一个WebApi项目,但与使用“服务帐户”称为服务器端的教程不同,我想从安全网站将其称为客户端(JQuery),其中包含当前登录用户的身份。
我知道我需要在身份验证标头中使用持票令牌。
我的问题是:如何在客户端获取当前登录用户的持有者令牌,以便我可以设置标头? (用户已登录。)
非常感谢您的帮助
如果您在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修改。
我想你可以将它们注入到_Layout.cshtml中的DOM中。最好通过初始化一些OidcClient和AJAX before send。你觉得怎么样,@ PinpointTownes?