我正在为带有表单的网站制作 Exact Online 的 API。访客将填写他的信息,然后访客将其发送。它需要从我的客户发送到确切的在线帐户。但在此之前我需要一个访问令牌。问题是我不想给用户 Exact 给我的登录页面。我已经搜索了几天以找到一种跳过登录或通过后端输入登录信息的方法(总是有 1 个登录,这就是我的客户端的登录)。
现在这个授权对我来说是新事物。到目前为止,我知道我可以从启动时调用我的授权设置:
HttpContext.Authentication.GetAuthenticateInfoAsync("ExactOnline");
但是后来我得到了我不想要的登录屏幕。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 时,这给了我一个 null 异常,可能是因为我的 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 });
有人知道如何解决这个问题吗?