Asp.net mvc DotNetOpenAuth-客户端标识符&;授权

Asp.net mvc DotNetOpenAuth-客户端标识符&;授权,asp.net-mvc,oauth,dotnetopenauth,Asp.net Mvc,Oauth,Dotnetopenauth,我有一个DNOA的实现,我遇到了麻烦。我看到的示例中的代码是错误的,无法正常工作,我无法找出如何使其正常工作 我问了一个关于DNOA组的类似问题,但我想知道这是否是一个与OAuth相关的更大的问题。安德鲁断言这应该行得通,但我看到很多人问同样的问题,却没有真正的解决办法 使用ExchangeUserCredentialForToken时,DNOA正在向授权服务器发送用户名密码凭据。在封面下,这使用了一个NetworkCredential类,该类似乎用于擦除客户端\u id和客户端\u机密属性(这

我有一个DNOA的实现,我遇到了麻烦。我看到的示例中的代码是错误的,无法正常工作,我无法找出如何使其正常工作

我问了一个关于DNOA组的类似问题,但我想知道这是否是一个与OAuth相关的更大的问题。安德鲁断言这应该行得通,但我看到很多人问同样的问题,却没有真正的解决办法

使用ExchangeUserCredentialForToken时,DNOA正在向授权服务器发送用户名密码凭据。在封面下,这使用了一个NetworkCredential类,该类似乎用于擦除客户端\u id和客户端\u机密属性(这些属性显然被移动到基本身份验证HTTP头中,然后由HttpWebRequest擦除)

在DNOA示例中,我看到代码检查系统中是否为用户和该客户持有有效授权

如果没有客户端标识符,则无法检查有效授权,因为我们无法检查请求的范围是否在用户可能授权或可能未授权客户端访问的范围内

我只能假设我的理解不正确,我看到的样本不正确,或者DNOA有问题

我已尝试使用以下方法手动反序列化access_令牌:

var token = accessTokenAnalyser.DeserializeAccessToken(new Dummy(), authHeader.Replace("Bearer ", ""));
但是,访问令牌中的clientidentifier也为null

从读取DNOA组上的线程来看,客户端标识符似乎也应该在CreateAccessToken方法中可用,但它从来都不可用-它总是空的

示例中的另一个场景显示身份验证服务器自动在TryAuthorizeResourceOwnerCredentialGrant中添加授权,但这同样是不可能的,因为clientidentifier始终为空

任何人都可以就我在使用客户端标识符方面的假设完全错误或在授权服务器上将客户端标识符引入请求的解决方案提出建议

此外,如果在此授权过程中,我们无法了解客户,我们也无法执行任何客户范围检查


有人知道如何让NetworkCredential类在请求中传递客户端id而不使其为空吗?

我通过创建自己的ClientCredentialApplicationor实现并在构建客户端时使用它解决了这个问题

课程非常简单:

public class ClientIdentifierApplicator : DotNetOpenAuth.OAuth2.ClientCredentialApplicator
{
    public string ApiKey { get; set; }
    public string ApiSecret { get; set; }

    public ClientIdentifierApplicator(string apiKey, string apiSecret)
    {
        ApiKey = apiKey;
        ApiSecret = ApiSecret;
    }

    public override void ApplyClientCredential(string clientIdentifier, System.Net.HttpWebRequest request)
    {
        base.ApplyClientCredential(clientIdentifier, request);
        request.Credentials = new NetworkCredential(ApiKey, ApiSecret);
    }
}
一旦该类可用,您就可以这样构造它:

        var clientCred = new ClientIdentifierApplicator(ApiKey, ApiSecret);
然后,在实例化客户端WebServerClient或UserAgentClient时,可以将其作为构造函数参数提供:

        var OAuthWebServerClient = new WebServerClient(AuthServerDescription, ApiKey, clientCred);

我尝试使用内部NetworkCredentialApplicator,但无法使其按预期工作。

使用DotNetOpenAuth附带的
后参数Applicator
也可以解决此问题

DotNetOpenAuth 4.1.5中的默认
networkCredentialApplicationor
(截至2012年12月2日尚未发布)