使用LibGit2Sharp进行Bitbucket身份验证

3
我使用CSharp.Bitbucket库对用户进行Bitbucket身份验证(https://github.com/scottksmith95/CSharp.Bitbucket)。身份验证正常工作,我得到了令牌值和令牌密钥值。
我已经编写了一个逻辑 - 借助LibGit2Sharp(https://github.com/libgit2/libgit2sharp) - 来克隆/拉取/推送用户存储库的内容。如果用户使用GitHub进行身份验证,则该逻辑有效。在这种情况下,我必须为用户名提供访问令牌值,并为密码提供空字符串。
 LibGit2Sharp.Credentials credentials = new UsernamePasswordCredentials()
        {
            Username = [GITHUB ACCESS TOKEN], 
            Password =""
        };

但是,关于Bitbucket呢?我能以这种方式使用LibGit2Sharp吗?我找不到任何关于这个问题的文档。我尝试使用token值和token密码作为用户名,但失败了。
我想使用Git和Mercurial来使用Bitbucket。有什么我还没有发现的小技巧吗?
感谢您的帮助!
3个回答

4
这个问题很旧,但我会为那些遇到这个问题的人提供答案。 首先,你需要获取一个访问令牌。 这里有详细的说明:链接。 一旦你获得了令牌,你可以像这样进行身份验证。
   CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials
        {
            Username = x-token-auth:[ACCES-TOKEN],
            Password = ""
        } 

希望能对某些人有所帮助。

1
它对我不起作用。我收到了“重定向或身份验证重播过多”的错误。 - Piyush Sahu
1
一样,我也看到了太多重定向错误。 - Chris Surfleet

2
这种将令牌作为用户名,空密码传递的方式是GitHub特有的(详见这篇帮助文章)。该文章还指出,传递x-oauth-basic也可以起到同样的作用。
BitBucket问题#7735似乎表明,将令牌作为用户名和x-oauth-basic一起传递也可以起到同样的作用。

访问令牌有一个值和一个密钥。我尝试了这两个(并将密码变量留空),但是我收到了以下错误消息。 你认为我做错了什么? - Gábor Domonkos
或许给support@bitbucket.org发送一封邮件是值得的。 - nulltoken

1

[2022] 您可以使用LibGit2Sharp甚至在Bitbucket上,但您不需要任何令牌。通过使用应用程序密码,流程会有一些不同。(即使启用了2FA也可以使用此方法。)

  1. In the bitbucket go to:

    • https://bitbucket.org/account/settings/app-passwords/
    • or manually navigate: Click your picture -> Personal settings -> App passwords
  2. Click Create app password

    • Name it after the service in which you will use it/or for what purpose
    • Add needed permissions
    • hit create
  3. Find your bitbucket name:

    • navigate to https://bitbucket.org/account/settings/
    • or Click your picture -> Personal settings -> Account settings
    • and in sub-category Bitbucket profile settings is your Username
  4. apply these credentials to your code. E.g.

    var url = "https://bitbucket.org/<user_or_org_name>/<repository_name>.git";
    var Username = "<your_user_name>";
    var Password = "<your_app_password>";
    var localPathForRepository = @"D:\temp";
    
    var creds = new UsernamePasswordCredentials()
    {
        Username = Username,
        Password = Password
    };
    
    CredentialsHandler credHandler = (_url, _user, _cred) => creds;
    
    bool dirExists = Directory.Exists(localPathForRepository);
    if (dirExists)
    {
        Directory.Delete(localPathForRepository, true);
    }
    Directory.CreateDirectory(localPathForRepository);
    
    var cloneOptions = new CloneOptions { BranchName = "master", Checkout = true, CredentialsProvider = credHandler };
    var cloneResult = Repository.Clone(url, localPathForRepository, cloneOptions);
    
  5. DONE

Sources:

https://support.atlassian.com/bitbucket-cloud/docs/app-passwords/

https://id.atlassian.com/manage-profile/security/api-tokens

https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/#Use-an-API-token


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接