我正在尝试向Visma Api进行身份验证。 (visma.net)使用OAuth2。 因此,我创建了一个使用UserAgentClient进行身份验证的authhelper。常量中的所有值都是正确的。当然,这应该从文件中读取,但是为了简单起见,我只是尝试了一下。
所以我面临的问题是,在Authenticate函数中,ProcessUserAuthorization(我已经尝试过这两个方法,因此都注释了),返回null,而exchangeforken则返回400错误。
鉴于1.我提供的所有信息正确无误,所以我在做什么。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);
}
请注意,使用ExchangeUserCredentialForToken返回400,而ProcessUserAuthorization返回null。最终我只想要一个令牌,所以我想使用ExchangeUserCredentialForToken