【问题标题】:Custom Web API oAuth Authentication自定义 Web API oAuth 身份验证
【发布时间】:2017-01-13 02:51:36
【问题描述】:

我有一个有趣的场景,我需要构建一个具有自定义身份验证的 Web API,由将连接到我的 Web API 服务的客户端指定。 (通常是 Service 定义了合同,但对于这个项目,情况正好相反,很遗憾)。

所以我配置了“标准”OAuthAuthorization,并按照标准 Visual Studio Web API 项目模板工作。

当客户端向 /token 端点发出以下请求时:

curl -X POST "http://localhost:2432/Token" -d "grant_type=password&userName=MyUserName&password=MyPassword"

端点返回以下令牌:

{
  "access_token": "the full token is here...",
  "token_type": "bearer",
  "expires_in": 1209599,
  "userName": "MyUserName",
  ".issued": "Mon, 05 Sep 2016 17:35:08 GMT",
  ".expires": "Mon, 19 Sep 2016 17:35:08 GMT"
}

现在,我需要更改服务器以便接受以下令牌请求结构:

curl -u "MyUserName:MyPassword" -X GET "http://server/api/token"

并且返回的令牌需要按照以下结构:

{"id":"generated GUID here"}

然后在对服务的后续请求中,GUID 将包含在自定义标头中:

curl -H "X-CrmIService-Token: 在此处生成 GUID" -X GET "http://server/api/protectedResource"

我对必须添加自定义授权过滤器以使用自定义标头授权对受保护资源的请求的概念感到满意。

但我需要有关如何配置和设置授权中间件以使登录请求正常工作的指导。

上面提到的第二种结构的请求失败,服务器返回

{"error":"unsupported_grant_type"}

在遇到我在解决方案中设置的任何断点之前。

请告知我需要如何配置我的授权中间件?

【问题讨论】:

    标签: asp.net-web-api oauth


    【解决方案1】:

    您所看到的变化并不是 OAuth2 的真正工作方式。 OAuth2 应该是应用程序级别的授权,而不是用户级别。

    假设您构建了一个使用 OAuth2 api 的网络应用程序。 clientid:client 密钥适用于应用程序的所有用户,它不会唯一标识用户。这样一个系统的重点是避免使用密码,并确保只有授权的应用程序才能真正使用它。

    您可以拥有类似于 ValidateUser 端点的东西,除了令牌之外,您还可以在其中发布用户名/密码,您可以在其中做任何您想做的事情。

    好好想想你在做什么,最重要的是为什么。

    【讨论】:

      猜你喜欢
      • 2016-05-06
      • 2016-04-05
      • 1970-01-01
      • 2018-03-15
      • 2014-05-21
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2016-12-11
      相关资源
      最近更新 更多