我正在为带有表单的网站制作Exact Online的API。访问者将填写他的信息,然后访问者发送信息。它需要从我的客户端发送到Exact在线帐户。但在此之前,我需要一个accessentoken。问题是我不想给用户提供Exact给我的登录页面。我已经搜索了几天以找到跳过登录或通过后端输入登录信息的方法(总共有1次登录,这是我客户的登录)。
现在这个授权对我来说是新事物。到目前为止,我知道我可以通过以下方式从启动中调用我的授权设置:
HttpContext.Authentication.GetAuthenticateInfoAsync(" ExactOnline&#34);
然后我得到了我不想要的登录屏幕。 Exact告诉我要做的唯一事情就是:
创建支持自动连接向导(您的配置流程)的应用注册。
有没有办法向他们发送登录信息,访问者也没有看到登录页。
在我的Startup.cs
中var s = new OAuthOptions{
AuthenticationScheme = "ExactOnline",
ClientId = "CLIENTID",
ClientSecret = "CLIENTSECRET",
CallbackPath = new PathString("/callback"),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
AuthorizationEndpoint = new Uri(string.Format("{0}/api/oauth2/auth", "https://start.exactonline.nl")).ToString(),
TokenEndpoint = new Uri(string.Format("{0}/api/oauth2/token", "https://start.exactonline.nl")).ToString(),
//Scope = { "identity", "roles" },
Events = new OAuthEvents
{
OnCreatingTicket = context =>
{
context.Identity.AddClaim(new Claim("urn:token:exactonline", context.AccessToken));
return Task.FromResult(true);
}
}
};
app.UseOAuthAuthentication(s);
首先我有这个代码,但是当我把这个身份放在claimprincipal中时,这给了我一个空例外,可能是因为我的claimprincipal为null而且我不知道为什么。
HttpContext.Authentication.AuthenticateAsync("ExactOnline");
var identity = new ClaimsIdentity("ExactOnline",ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
identity.Label = "Authentication";
identity.AddClaim(new Claim(ClaimTypes.Name, "USERNAME?"));
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "PASSWORD?"));
claimsPrincipal.AddIdentity(identity);
var test = HttpContext.Authentication.SignInAsync("ExactOnline", claimsPrincipal, new AuthenticationProperties() { IsPersistent = false }));
之后我尝试了以下代码,但这也没有用。我的代码将继续,但测试变量将填充此消息:名称' InnerExceptionCount'在当前背景下不存在。
var identity = new ClaimsIdentity("ExactOnline", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
identity.Label = "Authentication";
identity.AddClaim(new Claim("username", "USERNAME"));
identity.AddClaim(new Claim("password", "PASSWORD"));
ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(identity);
var test = HttpContext.Authentication.SignInAsync("ExactOnline", claimsPrincipal, new AuthenticationProperties() { IsPersistent = false });
有人知道如何解决这个问题吗?