【发布时间】:2012-11-29 10:37:44
【问题描述】:
我有一个 DNOA 实现,但遇到了麻烦。我看到的示例中的代码是错误的,无法正常工作,我无法弄清楚如何让它正常工作。
我在 DNOA 组 here 上问过一个类似的问题,但我想知道这是否实际上是一个与 OAuth 相关的更大问题。 Andrew 断言这应该可行,但我看到很多人问同样的问题,但没有真正的解决方案。
当使用 ExchangeUserCredentialForToken 时,DNOA 正在向授权服务器发送用户名密码凭据。在幕后,这使用了一个 NetworkCredential 类,该类似乎擦除了 client_id 和 client_secret 属性(这些显然已移入基本身份验证 HTTP 标头,然后又被 HttpWebRequest 擦除。
在 DNOA 示例中,我看到代码检查系统中是否为用户和此客户端持有有效授权。
如果没有客户端标识符,则无法检查有效授权,因为我们无法检查请求的范围是否在用户可能授权或未授权客户端访问的范围内。
我只能假设要么我的理解不正确,要么我看到的样本不正确,要么 DNOA 有问题。
我尝试使用以下方法手动反序列化 access_token:
var token = accessTokenAnalyser.DeserializeAccessToken(new Dummy(), authHeader.Replace("Bearer ", ""));
但是,访问令牌中的客户端标识符也是空的。
从读取 DNOA 组的线程来看,客户端标识符似乎也应该在 CreateAccessToken 方法中可用,但它永远不会 - 它始终为空。
示例中的另一个场景显示授权服务器自动在 TryAuthorizeResourceOwnerCredentialGrant 中添加授权,但这也是不可能的,因为 clientidentifier 始终为空。
任何人都可以就我对使用客户端标识符的假设或将客户端标识符获取到授权服务器的请求中的解决方案提出建议。
此外,如果在此授权过程中我们无法知道客户端,我们也无法执行任何客户端范围检查。
有谁知道如何让 NetworkCredential 类在请求中传递 client_id 而不会使其为空?
【问题讨论】:
标签: asp.net-mvc oauth dotnetopenauth