带密码授权的 DotNetOpenAuth OAuth 2.0 授权服务器

Posted

技术标签:

【中文标题】带密码授权的 DotNetOpenAuth OAuth 2.0 授权服务器【英文标题】:DotNetOpenAuth OAuth 2.0 Authorization Server with Password grant 【发布时间】:2012-10-01 06:54:23 【问题描述】:

我们想根据以下角色建立自己的 OAuth 2.0 授权服务器:

资源服务器 - 使用 ASP.NET Web API 构建的 API 客户端 - 使用 ASP.NET MVC 构建的 Web 应用程序 资源所有者 - 最终用户

我们计划使用密码授予类型 (Resource Owner Password Credentials Grant),以便资源所有者将其凭据提交给客户,客户反过来会提出授权请求。我们希望使用基本身份验证对客户端请求进行身份验证。

我正在努力解决如何使用支持此授权类型的 DNOA 设置授权服务器。我已经下载了授权服务器示例项目,但这似乎是使用基于令牌的授权(用户直接使用授权服务器进行身份验证 - 在示例中,通过 OpenID)。

当我尝试使用 fiddler 发出授权请求时,我只是被重定向到登录页面,因此我假设此示例不支持此授权类型:

POST http://localhost:50172/oauth/authorize HTTP/1.1
User-Agent: Fiddler
Host: localhost:50172
Content-Length: 103

grant_type=password&client_id=sampleconsumer&client_secret=samplesecret&username=user&password=password

如果我使用基本身份验证也是如此。

任何帮助将不胜感激。我过去曾成功使用 DNOA 来使用 OAuth 服务,但我发现有关设置/配置服务器的文档非常少。

【问题讨论】:

我目前正在经历相同的过程,并且需要很长时间才能使其正常工作。 DNOA 提供的一些样本是完全错误的,不能按编码工作。我目前正在尝试弄清楚如何授权客户和用户。我现在很难过,因为从来没有将 clientidentifier 提供给似乎需要它的方法。 干扰器,我想了解更多关于“完全错误”的样本。您能否通过电子邮件将反馈发送至 dotnetopenid@googlegroups.com? 【参考方案1】:

您似乎将密码授权发送到授权服务器的授权端点,这是错误的。授权应直接发送到 token 端点,该端点必须位于授权服务器不需要经过身份验证的请求即可访问的 URL(即不会导致 ASP.NET 重定向到登录页面) .

也就是说,基于 Web 的客户端应用程序要求用户输入另一个 Web 服务的密码是非常不寻常的(并且不鼓励)。到目前为止,授权代码流是您所描述的场景的首选。

【讨论】:

以上是关于带密码授权的 DotNetOpenAuth OAuth 2.0 授权服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在客户端获取 DotNetOpenAuth.OAuth2 返回的错误消息?

DotNetOpenAuth:消息签名不正确

设置HttpClient的授权头

DotNetOpenAuth 和 ResourceServer 服务 https 配置

使用 Google Latitude 和 DotNetOpenAuth 寻找代码示例

DotNetOpenAuth2 中的单个 AuthZ/AuthN 端点