Я хочу создать бота, который может проходить аутентификацию с помощью GitHub, получать доступ к репозиториям пользователей и уведомлять пользователей с помощью любых PR и т. Д. Я попробовал пример аутентификации, предоставленный Microsoft, перечисленный здесь .Но я не понимаю, как изменить его в соответствии с моими потребностями.
Я реализовал OAuth в своем приложении следующим образом, поскольку это основное приложение dotnet.
public void ConfigureServices(IServiceCollection services)
{
// Set up the service configuration
var builder = new ConfigurationBuilder()
.SetBasePath(ContentRootPath)
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables();
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "GitHub";
})
.AddCookie()
.AddOAuth("GitHub", options =>
{
options.ClientId = Configuration["GitHub:ClientId"];
options.ClientSecret = Configuration["GitHub:ClientSecret"];
options.CallbackPath = new PathString("/signin_github");
options.AuthorizationEndpoint = "https://github.com/login/oauth/authorize";
options.TokenEndpoint = "https://github.com/login/oauth/access_token";
options.UserInformationEndpoint = "https://api.github.com/user";
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
options.ClaimActions.MapJsonKey("urn:github:login", "login");
options.ClaimActions.MapJsonKey("urn:github:url", "html_url");
options.ClaimActions.MapJsonKey("urn:github:avatar", "avatar_url");
options.Events = new OAuthEvents
{
OnCreatingTicket = async context =>
{
var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
var response = await context.Backchannel.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted);
response.EnsureSuccessStatusCode();
var user = JObject.Parse(await response.Content.ReadAsStringAsync());
context.RunClaimActions(user);
}
};
});
var configuration = builder.Build();
services.AddSingleton(configuration);
// Add your SimpleBot to your application
services.AddBot<RichCardsBot>(options =>
{
options.CredentialProvider = new ConfigurationCredentialProvider(configuration);
});
}
Я не делаюпонять, как вызвать это из моего бота пользовательского интерфейса.Любая помощь будет оценена.Спасибо.