Bot Framework SDK v4 OAuth с Github - PullRequest
0 голосов
/ 07 октября 2018

Я хочу создать бота, который может проходить аутентификацию с помощью 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);
        });


    }

Я не делаюпонять, как вызвать это из моего бота пользовательского интерфейса.Любая помощь будет оценена.Спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

Похоже, вы идете по этому поводу неправильно, работая в среде ботов.Вы должны следовать этому руководству .В руководстве рассказывается, как настроить AAD, но все же описываются основы настройки соединения OAuth на портале Azure.

Чтобы настроить github, нажмите кнопку добавления соединения на вкладке настроек вашегорегистрация каналов бота и заполнение необходимой информации, это будет выглядеть так:

GitHub Connection

В вашем боте вы должны будете отправить пользователю OAuthКарточка, как вы видите в примере, и остальная часть потока OAuth будет обрабатываться платформой, если вы правильно настроили ваше соединение на портале Azure.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...