asp.net - OpenId Connect,让不记名 token 客户端在 MVC 登录后调用 WebApi 的最佳方法?

标签 asp.net asp.net-web-api2 thinktecture-ident-server bearer-token openid-connect

我希望有人能就此向我提出建议。

我一直在关注本教程的修改形式 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/

相关文章:

jwt - 如何在 Thinktecture Identity Server 中加密 JWT token ?

c# - 在真实场景中实现身份服务器身份验证

c# - 在 Web 上创建 API 意味着什么?

c# - 如何将值从 View 传递到 Controller

javascript - 如何在 jQuery 模式中打开 Window.Open

rest - 解析 Web API 路由中的自定义格式 DateTime 值

c# - 如何将Web api小数结果格式化为两位小数

c# - ASP.NET 中的 List<T> 和 ListViews 的 Dictionary<T>

C# WebAPI 没有正确序列化动态属性

asp.net-web-api - 从 Web API 2 基于声明的身份验证迁移到 ThinkTecture