如何在没有外部登录面板的情况下使用C#核心OAuth

时间:2017-08-20 13:47:50

标签: c# api oauth asp.net-core exact-online

我正在为带有表单的网站制作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 });

有人知道如何解决这个问题吗?

0 个答案:

没有答案