Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ProcessUserAuthorization返回null,ExchangeUserCredentialsForToken返回400_C#_.net_Api_Http Status Code 400_Visma Net - Fatal编程技术网

C# ProcessUserAuthorization返回null,ExchangeUserCredentialsForToken返回400

C# ProcessUserAuthorization返回null,ExchangeUserCredentialsForToken返回400,c#,.net,api,http-status-code-400,visma-net,C#,.net,Api,Http Status Code 400,Visma Net,我正在尝试验证Visma Api。(visma.net)使用OAuth2。 因此,我创建了一个authhelper,它使用UserAgentClient来实现这一点。常量中的所有值都是正确的。当然,这应该从文件中读取,但我只是为了简单起见尝试了这个方法 所以我面临的问题是,在函数Authenticate中,ProcessUserAuthorization(我已经尝试了这两种方法,因此它会被注释)返回null,而exchangefortoken返回400错误 考虑到这一点,我做错了什么。提供的所有

我正在尝试验证Visma Api。(visma.net)使用OAuth2。 因此,我创建了一个authhelper,它使用UserAgentClient来实现这一点。常量中的所有值都是正确的。当然,这应该从文件中读取,但我只是为了简单起见尝试了这个方法

所以我面临的问题是,在函数Authenticate中,ProcessUserAuthorization(我已经尝试了这两种方法,因此它会被注释)返回null,而exchangefortoken返回400错误

考虑到这一点,我做错了什么。提供的所有信息都是正确的2。api可以工作,身份验证也应该可以工作,因为它在Postman中可以正确地进行身份验证。这让我相信我在代码中做错了什么

public static class AuthHelper
{
    public static UserAgentClient CreateClient()
    {
        var authorizationEndpoint = new Uri($"{Constants.IDENTITY_SERVER_ADDRESS}/connect/authorize");
        var tokenEndpoint = new Uri($@"{Constants.IDENTITY_SERVER_ADDRESS}/connect/token");
        var serverDesc = GetAuthorizationServerDescription();
        var client = new UserAgentClient(serverDesc, Constants.CLIENT_ID, Constants.CLIENT_SECRET);
        return client;
    }

    private static AuthorizationServerDescription GetAuthorizationServerDescription()
    {
        var authorizationEndpoint = $@"{Constants.IDENTITY_SERVER_ADDRESS}/connect/authorize";
        var tokenEndpoint = $@"{Constants.IDENTITY_SERVER_ADDRESS}/connect/token";

        var serverDesc = new AuthorizationServerDescription
        {
            ProtocolVersion = ProtocolVersion.V20,
            AuthorizationEndpoint = new Uri(authorizationEndpoint),
            TokenEndpoint = new Uri(tokenEndpoint)
        };

        return serverDesc;
    }
}

private static void Authenticate()
{
    var scopes = new List<string> { "offline_access", "ea:api", "ea:sales" };
    var client = AuthHelper.CreateClient();

    var c = client.ProcessUserAuthorization(new Uri(Constants.REDIRECT_URI), new AuthorizationState(scopes));

    //var token = client.ExchangeUserCredentialForToken(Constants.USERNAME, Constants.PASSWORD, scopes);
    Console.WriteLine(c.Callback.AbsolutePath);
}
公共静态类AuthHelper
{
公共静态UserAgentClient CreateClient()
{
var authorizationEndpoint=新Uri($“{Constants.IDENTITY\u SERVER\u ADDRESS}/connect/authorization”);
var tokenEndpoint=新Uri($@“{Constants.IDENTITY_SERVER_ADDRESS}/connect/token”);
var serverDesc=GetAuthorizationServerDescription();
var client=new UserAgentClient(serverDesc,Constants.client\u ID,Constants.client\u SECRET);
返回客户;
}
私有静态授权服务器描述GetAuthorizationServerDescription()
{
var authorizationEndpoint=$@“{Constants.IDENTITY_SERVER_ADDRESS}/connect/authorization”;
var tokenEndpoint=$@“{Constants.IDENTITY_SERVER_ADDRESS}/connect/token”;
var serverDesc=新授权服务器描述
{
ProtocolVersion=ProtocolVersion.V20,
AuthorizationEndpoint=新Uri(AuthorizationEndpoint),
TokenEndpoint=新Uri(TokenEndpoint)
};
返回serverDesc;
}
}
私有静态void身份验证()
{
var scopes=新列表{“脱机访问”、“ea:api”、“ea:sales”};
var client=AuthHelper.CreateClient();
var c=client.ProcessUserAuthorization(新Uri(常量.REDIRECT_Uri)、新AuthorizationState(作用域));
//var token=client.ExchangeUserCredentialForToken(Constants.USERNAME、Constants.PASSWORD、scopes);
Console.WriteLine(c.Callback.AbsolutePath);
}
请注意,使用ExchangeUserCredentialForToken返回400,ProcessUserAuthorization返回null。最终我只需要一个代币,所以我想使用ExchangeUserCredentialForToken