0

在撰写本文时,此行为在 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.

由于客户端是公开的,因此代码会产生错误。然而,上面代码中的注释暗示授权是经过客户端身份验证的,而不是资源所有者密码凭据。我叫错了吗?

在主分支中,相同的调用有效。

4

1 回答 1

1

v4.0 不支持该场景,而 master 分支(计划用于 v4.1)目前支持。DotNetOpenAuth 是否继续支持使用资源所有者密码授予类型的公共客户端仍有待确定,因为如果用户想要查看授权客户端,它会导致授权服务器以合理的用户体验撤销令牌的能力出现问题。

于 2012-05-03T13:35:49.337 回答