C# ProcessUserAuthorization返回null,ExchangeUserCredentialsForToken返回400
我正在尝试验证Visma Api。(visma.net)使用OAuth2。 因此,我创建了一个authhelper,它使用UserAgentClient来实现这一点。常量中的所有值都是正确的。当然,这应该从文件中读取,但我只是为了简单起见尝试了这个方法 所以我面临的问题是,在函数Authenticate中,ProcessUserAuthorization(我已经尝试了这两种方法,因此它会被注释)返回null,而exchangefortoken返回400错误 考虑到这一点,我做错了什么。提供的所有信息都是正确的2。api可以工作,身份验证也应该可以工作,因为它在Postman中可以正确地进行身份验证。这让我相信我在代码中做错了什么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错误 考虑到这一点,我做错了什么。提供的所有
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