日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jgit_JGit身份验证说明

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jgit_JGit身份验证说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jgit

JGit中的身份驗證與本地Git大致相同。 支持SSH和HTTP(S)等常用協議及其身份驗證方法。 本文總結了如何使用JGit身份驗證API安全地訪問遠程Git存儲庫。

盡管本文中的示例使用CloneCommand,但是可以將所描述的技術應用于連接到遠程存儲庫的所有類,例如FetchCommand,PushCommand,LsRemoteCommand等。所有這些命令都有一個公共基類-TransportCommand-提供了所討論的方法這里。

HTTP(S)– https://example.com/repo.git

通過HTTP和HTTPS進行身份驗證非常簡單。 當命令請求身份驗證憑據時,將使用CredentialsProvider的實現返回身份驗證憑據。 可以通過setCredentialsProvider()指定用于特定命令的CredentialsProvider。

例如,以下代碼通過HTTPS克隆存儲庫,并使用用戶名和密碼進行身份驗證。

CloneCommand cloneCommand = Git.cloneRepository(); cloneCommand.setURI( "https://example.com/repo.git" ); cloneCommand.setCredentialsProvider( new UsernamePasswordCredentialsProvider( "user", "password" ) );

UsernamePasswordCredentialsProvider是JGit隨附的CredentialsProvider的實現,并使用給定的用戶名和密碼進行身份驗證。

另外,JGit(3.5版和更高版本)也可以從用戶的.netrc文件中讀取憑據。 NetRCCredentialsProvider使用文件中的第一個機器條目進行身份驗證。

盡管不建議通過不安全的連接發送憑據,但是所描述的方法也適用于純HTTP,例如http://example.com/repo.git。

帶有公鑰的SSH – ssh://user@example.com/repo.git

JGit委托創建和銷毀與抽象SshSessionFactory的SSH連接。 要將公共密鑰身份驗證用于SSH連接,必須為執行的命令指定這樣的會話工廠。

使用setTransportConfigCallback(),可以指定TransportConfigCallback接口以攔截連接過程。 建立連接之前,將調用唯一的方法configure()。 傳遞給它一個傳輸類型的參數,該參數將用于在本地和遠程存儲庫之間復制對象。 對于每個協議,都有一個不同的Transport子類來處理該協議的各個詳細信息。

如下所示,該回調可用于在使用前立即配置Transport實例:

SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {@Overrideprotected void configure( Host host, Session session ) {// do nothing} }; CloneCommand cloneCommand = Git.cloneRepository(); cloneCommand.setURI( "ssh://user@example.com/repo.git" ); cloneCommand.setTransportConfigCallback( new TransportConfigCallback() {@Overridepublic void configure( Transport transport ) {SshTransport sshTransport = ( SshTransport )transport;sshTransport.setSshSessionFactory( sshSessionFactory );} } );

JGit提供了一個抽象的JSchConfigSessionFactory,它使用JSch建立SSH連接,并要求覆蓋它的configure()。 因為在最簡單的情況下沒有任何要配置的內容,所以上面的示例只是覆蓋了使代碼編譯的方法。

JSchConfigSessionFactory大多數與本機Git使用的SSH實現OpenSSH兼容。 它從用戶的.ssh目錄中的默認主機(身份,id_rsa和id_dsa)的默認位置加載已知主機和私鑰。

如果您的私鑰文件的名稱不同或位于其他位置,則建議覆蓋createDefaultJSch()。 調用基本方法后,可以像這樣添加自定義私鑰:

@Override protected JSch createDefaultJSch( FS fs ) throws JSchException {JSch defaultJSch = super.createDefaultJSch( fs );defaultJSch.addIdentity( "/path/to/private_key" )return defaultJSch; }

在此示例中,添加了來自自定義文件位置的私鑰。 如果您查看JSch JavaDoc ,將會發現更多重載的addIdentity()方法。

為了完整起見,我應該提到還有一個全球會話工廠。 可以通過SshSessionFactory.get / setInstance()獲取和更改它,并且如果沒有為命令配置特定的shSessionFactory,它將用作默認值。 但是,我建議不要使用它。 除了使編寫獨立的測試變得更加困難之外,您的控件之外可能還有一些代碼會更改全局會話工廠。

SSH和密碼– ssh://user@example.com/repo.git

與通過公用密鑰使用SSH一樣,必須指定SshSessionFactory以使用受密碼保護的SSH連接。 但是這次,會話工廠的configure()方法是有目的的。

SshSessionFactory sshSessionFactory = new JschConfigSessionFactory() {@Overrideprotected void configure( Host host, Session session ) {session.setPassword( "password" );} } );CloneCommand cloneCommand = Git.cloneRepository(); cloneCommand.setURI( "ssh://user@example.com/repo.git" ); cloneCommand.setTransportConfigCallback( new TransportConfigCallback() {@Overridepublic void configure( Transport transport ) {SshTransport sshTransport = ( SshTransport )transport;sshTransport.setSshSessionFactory( sshSessionFactory );} } );

JSch會話表示與SSH服務器的連接,在第4行中,設置了當前會話的密碼。 其余代碼與用于通過SSH與公共密鑰身份驗證進行連接的代碼相同。

使用哪種身份驗證方法?

此處討論的某些身份驗證方法也可以組合使用。 例如,在嘗試通過帶有公共密鑰的SSH連接到遠程存儲庫時設置憑據提供者不會有任何危害。 但是,您通常希望事先知道給定的存儲庫URL將使用哪種傳輸。

為了確定這一點,可以使用TransportProtocol的canHandle()方法。 如果協議可以處理給定的URL,則返回true,否則返回false。 可以從Transport.getTransportProtocols()獲得所有已注冊TransportProtocol的列表。 一旦知道了協議,就可以選擇適當的身份驗證方法。

驗證@ GitHub

GitHub支持多種協議和身份驗證方法,但肯定不是所有可能的組合。 例如,一個常見的錯誤是嘗試將SSH與密碼驗證一起使用。 但是不支持此組合-僅支持帶公鑰的SSH。

GitHub提供的協議的比較列出了支持的內容和不支持的內容。 總結一下,有:

  • Plain Git(例如git://github.com/user/repo.git):傳輸未加密,服務器未通過驗證。
  • HTTPS(例如https://github.com/user/repo.git):實際上可在任何地方使用。 使用密碼身份驗證進行推送,但允許匿名獲取和克隆。
  • SSH(例如ssh://git@github.com:user / repo.git):使用公鑰身份驗證,也用于獲取和克隆。

結束JGit身份驗證

雖然我發現身份驗證功能在JGit API上散布了很多,但它們可以完成任務。 此處給出的食譜有望為您提供必要的基礎知識,以驗證JGit中的連接,并且隱藏API的復雜性可以視為練習干凈代碼的練習!

如果您有困難或問題,請隨時發表評論或向友好而樂于助人的JGit社區尋求幫助。

翻譯自: https://www.javacodegeeks.com/2014/12/jgit-authentication-explained.html

jgit

總結

以上是生活随笔為你收集整理的jgit_JGit身份验证说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。