在撰写本文时,此行为在 DotNetOpenAuth 的 master 分支和 v4.0 分支中有所不同。我将资源所有者密码凭据授予类型与公共客户端一起使用。master 分支按预期发出令牌。v4.0 分支认为请求无效。执行流程在AccessRequestBindingElement.ProcessIncomingMessage
方法中结束,其中执行以下代码:
// Check that the client secret is correct.
var client = this.AuthorizationServer.GetClientOrThrow(accessRequest.ClientIdentifier);
string secret = client.Secret;
ErrorUtilities.VerifyProtocol(!string.IsNullOrEmpty(secret), Protocol.unauthorized_client); // an empty secret is not allowed for client authenticated calls.
由于客户端是公开的,因此代码会产生错误。然而,上面代码中的注释暗示授权是经过客户端身份验证的,而不是资源所有者密码凭据。我叫错了吗?
在主分支中,相同的调用有效。