gpt4 book ai didi

c# - 使用用户名和密码从 WPF 应用程序进行 GitHub 身份验证

转载 作者:太空狗 更新时间:2023-10-29 13:45:48 24 4
gpt4 key购买 nike

我正在开发一个小型 WPF 应用程序,它将位于本地 Git 存储库之上。

这是一个业务线应用程序,允许一些业务用户通过 GUI 编辑一些文件,然后将它们推送回 GitHub

我正在使用 LibGit2Sharp 库来处理所有 git 命令,但我还想强制用户在每次加载应用程序时使用他们的 GitHub 凭据登录到应用程序。

我一直在查看 OAuth2 库和一些现有的 nuget 包 ( http://johnnycode.com/GitHubOAuth2Client/ ),但它们似乎都围绕基于 Web 的应用程序展开,并且需要客户端 ID 和 key 。

任何人都可以指出一个简单的 API 的方向,该 API 将采用用户名和密码并为登录尝试返回简单的成功/失败,或者我是否坚持围绕 GitHub API 编写自己的包装器

最佳答案

我最终通过对旧版 v2 API 的简单 REST 调用解决了这个问题,同时在请求特定的 repo 协议(protocol)时在 auth header 中传递用户名和密码。然后检查请求的 Repo 返回的权限。

private class Permissions
{
public bool Admin { get; set; }
public bool Push { get; set; }
public bool Pull { get; set; }
}

private class GitHubRepo
{
public Permissions Permissions { get; set; }
public string Name { get; set; }
}

public bool Authenticate(string userName, string password)
{
try
{
var apiUrl = "https://api.github.com/";
var resource = "repos/myAccount/";
var repoName = "myRepo";

var client = new RestClient
{
BaseUrl = apiUrl,
Authenticator = new HttpBasicAuthenticator(userName, password)
};

var request = new RestRequest {Resource = string.Join("", resource, repoName)};

var response = client.Execute<List<GitHubRepo>>(request);
if ((int) response.StatusCode >= 200 && (int) response.StatusCode < 209)
{
if (response.Data.Any(r => r.Name == repoName))
{
var repo = response.Data.Single(r => r.Name == repoName);

if (repo.Permissions.Admin || (repo.Permissions.Pull && repo.Permissions.Push))
{
return true;
}
}
}

return false;
}
catch
{
return false;
}
}

关于c# - 使用用户名和密码从 WPF 应用程序进行 GitHub 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com