我希望有人能就此向我提出建议。
我一直在关注本教程的修改形式 Getting started with thinktecture Identity server尝试使用 OpenId Connect 身份验证设置站点。
我有这个设置:
充当身份服务器的 Asp.NET MVC 项目
作为安全网站的 Asp.NET MVC 项目
上述设置运行良好。当有人试图访问安全网站中具有[授权]属性的 Controller 时,他们将被重定向到身份服务器进行登录,然后在成功登录后重定向回安全网站。
我现在想在组合中添加一个网络 API。我已经创建了一个 WebApi 项目,但与教程中使用“服务帐户”将其称为服务器端不同,我想使用当前登录用户的身份从安全网站将其称为客户端 (JQuery)。
我了解我需要在身份验证 header 中使用不记名 token 。
我的问题是:如何在客户端获取当前登录用户的不记名 token ,以便设置 header ? (用户已经登录。)
非常感谢您的帮助
最佳答案
如果您在 Identity Server 应用程序中使用 .Net Framework 4.5.1,您可能已经将 TokenEndpointPath 定义为“/Token”。查看 App_Start 文件夹中的 Startup.Auth.cs 文件。
调用客户端可以通过将有效的用户名/密码发送到端点来从/Token 端点检索承载 token 。我创建了一个简单的代码笔来使用新的 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 修改。
关于asp.net - OpenId Connect,让不记名 token 客户端在 MVC 登录后调用 WebApi 的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27225410/