【发布时间】:2014-01-18 00:54:26
【问题描述】:
我刚刚使用 DotNetOpenAuth 4.3.4 完成了 OAuth2 的授权和资源服务器。为了测试,我通过实现 OAuth2Client 创建了测试客户端。
因为我使用 DNOA 进行所有通信和请求解析,所以我不确定我是否完全理解幕后发生的事情。但是当我制作文档时,这些知识非常重要。
那么,您能否向我解释一下,客户端身份验证在 DNOA 中是如何工作的?我使用授权代码作为 grant_type,当我使用我的测试客户端交换 access_token 的代码时,DNOA 以某种方式验证了 client_secret 和 client_id。我下载了 DNOA 的源代码,但没有用。
当我将断点设置为 Oauth2 控制器(令牌方法)并将请求解析为 HttpRequestMessage 时,我看到请求包含“grant_type”、“code”和“redirect_uri”。但是client_id和client_secret在哪里呢?
另外,您能告诉我在哪里可以找到任何可用的 DNOA 文档吗?我需要创建对所有平台都有效且可用的文档,而不仅仅是可以使用 DNOA 的 C#。
相关问题: 我在某处读到,我们不应该为未经身份验证的客户端创建授权码,但这正是 DNOA 所做的(因为即使密码错误,我也会收到授权码)。没事吧?
编辑:
这是我正在尝试阅读的请求。它是 DNOA 客户端发出的令牌请求。我在“code”、“redirect_uri”和“grant_type”等其他参数下看不到client_id和client_secret。我认为他们必须在一起。也许我从 http 请求和响应中遗漏了一些重要的东西。
当我让 DNOA 继续处理 HandleTokenRequest(request) 时,它成功地验证了客户端应用程序(当在 DNOA 客户端应用程序配置中设置了错误的秘密时失败)。
编辑 2
private readonly WebServerClient Client;
protected override string QueryAccessToken(Uri returnUrl, string authorizationCode)
{
var authorization = Client.ProcessUserAuthorization();
if (authorization != null)
return authorization.AccessToken;
else
return null;
}
这是我的 QueryAccessToken 实现。它来自一些样本。我想我一开始就创造了它,并没有改变它,因为它有效。
粗略的 DNOA 来源我发现它是来自 OAuth 1 的方法。这可能是问题所在。但问题是,为什么它适用于正确的客户凭证而不适用于坏的凭证。
最终编辑
看起来 DNOA 客户端使用 http 基本授权(client_id 和 secret 在标头中)。但我需要 DNOA 服务器能够从 POST 中获取这些参数。
如果有人知道如何设置 DNOA 以支持 POST 参数中的 client_id 和 client_secret,那就太棒了!
谢谢
【问题讨论】:
-
DNOA 是一团糟。不要试图理解它在做什么。只需阅读互联网上的 OAuth2 规范摘要即可。
-
我想说客户开发者“采用 OAuth2 规范并针对它进行开发”,但恐怕 DNOA 并没有实现所有内容,而且并非所有内容都相同。 .
-
DNOA 不复杂也不乱。您不必全部探索它,因为它不仅仅是 oauth2。我的回答中有更多内容。
标签: c# oauth-2.0 dotnetopenauth