【问题标题】:Implementating OAuth access token in ASP.NET Web API2 webservice在 ASP.NET Web API 2 webservice 中实现 OAuth 访问令牌
【发布时间】:2014-07-21 08:10:17
【问题描述】:

我使用 ASP.NET Web API 并使用 jquery ajax 方法。

我想使用 OAuth 访问令牌创建安全的 Web 服务。

如何实现 OAuth2 到 ASP.NET Web API2 Web 服务?

我想阻止在未登录的情况下使用 Web 服务 - 没有访问令牌。

有一个将 oauth2 实现到 Web 服务的示例项目吗?

WebApi 控制器示例:

public class GetDataController : ApiController
{
    public string Get(int id, string accessToken)
    {

        //Check access token
        //How can I implementing this logic for authorization valid access token
        if (accessToken == isInvalid)
        {
            return "Access denied";
        }

        //If accessToken is valid return value
        return "value";
    }
}

Javascript:

$.get( "api/getdata", { id: 1, accessToken: "KEY" } )
.done(function( data ) {
alert( "Data Loaded: " + data );
});

【问题讨论】:

    标签: c# asp.net web-services oauth asp.net-web-api2


    【解决方案1】:

    最简单的方法是从新的 Visual Studio 2013 ASP.NET Web 应用程序模板开始。在“新建 ASP.NET 项目”对话框中选择“Web API”,然后单击“更改身份验证”按钮并选择选项“个人用户帐户”如下图:

    这将创建一个项目,该项目使用新的 ASP.NET 成员“家庭成员”ASP.NET Identity不记名令牌 OAuth 实现。

    你需要看的是以下类:

    App_Start->Startup.Auth.cs

    令牌认证由 OWIN 中间件处理,这里是配置管道的代码。最重要的是对 UseOAuthBearerTokens 的调用,它将启用 3 个 OWIN 中间件组件授权服务器中间件、应用程序承载令牌中间件、外部承载令牌中间件。你可能不需要最后一个。

    App_Start->IdentityConfig.cs

    默认情况下,ASP.NET Identity 使用实体框架作为存储提供程序(用户、角色、声明持久性)。如果您不使用 EF,则必须切换到另一个存储提供程序或使用几个接口自己实现它。 Overview of Custom Storage Providers for ASP.NET Identity.

    Providers->ApplicationOAuthProvider.cs

    OWIN 中间件将使用适当的标头处理每个请求。下面是针对存储提供程序验证 HTTP 标头中提供的用户名和密码的代码,并返回您将附加到每个后续 HTTP 请求的令牌。

    身份验证工作流程

    1. 首先,您需要获取安全令牌。这是 OAuth 授权服务器的任务。令牌端点配置为存在于http://yourSite/Token。要获取令牌,您需要编写一个特殊的 HTTP 标头(使用 Fiddler 对其进行测试)。前 3 行应该是 POST 请求标头,最后一行是请求正文。

      Host: yoursite
      Content-Type: application/json;charset=UTF-8
      Content-Length: 51
      
      grant_type=password&username=xxxxxx&password=xxxxxx
      

      如果凭据正常,您将收到以下响应。保存 access_token 值,以便在第 2 步中使用它:

      .expires=Tue, 17 Jun 2014 22:11:12 GMT
      .issued=Tue, 03 Jun 2014 22:11:12 GMT
      access_token=c-D34PHKFGaPthuF2sIwmeowXYAPFiSPsMH...
      expires_in=1209599
      token_type=bearer
      userName=xxxxxxx
      
    2. 使用 jQuery 向受保护的资源编写适当的 GET 请求(使用 show response 查看整个响应):

      var getData = function(){
      var url = "http://yoursite/api/protectedResource/";
      $.ajax(url,{
      type: "GET",
      headers: "Authorization" : "Bearer " + accessToken
      }).always(showResponse);
      return false;
      };
      

    我希望这能让你开始。

    【讨论】:

      【解决方案2】:

      这并不是真正的 OAuth,更像是无状态身份验证。

      它不是 WebAPI,而是 here's a demo 使用 Nancy(我更喜欢 WebAPI)和无状态身份验证

      【讨论】:

        猜你喜欢
        • 2015-07-01
        • 2014-05-07
        • 2015-07-21
        • 2013-07-22
        • 1970-01-01
        • 2023-03-13
        • 2017-06-17
        • 1970-01-01
        相关资源
        最近更新 更多