簡體   English   中英

C#,OAuth2在調試模式下失敗,但是在運行可執行文件時可以正常工作

[英]C#, OAuth2 fails in debug mode but works ok when running executable

我有這段代碼:(示例中的用戶名和密碼已更改)

string un="test@test.com";
string pw="hq23@3";
string url="https://login.salesforce.com/services/oauth/token";
string cliid = "3MVG9yZ.WNae345QAvlJ.HwD94PbdkgMvpoq2IgBi3CPP.r8EfNQB.uAAm72swYrQSaG5TdhXseqChQiIBvox";
string clisec = "33861436554340449385";
HOauth2 h = new HOauth2(lurl,cliid,clisec);
HOauthResult r = h.authenticate(un, pw);
Console.WriteLine(r.getErm());
Console.WriteLine(r.getAccessToken());
Console.ReadKey();

如果我構建項目並運行可執行文件,則會得到預期的輸出:

NoError 00DA0000000tuBSm!ARsAQQZEdOXXXZAqmYtG.Sj9.6d7_DYdrdKqdnoAkANT4I3Lb4F3Pgz0AYSkRWVJKTmy3cqbGWcV2gSYCxvAbXkg6mJ8l_jK

但是,在VSDebug/Release模式運行項目時,同一段代碼會產生輸出:

invalid_grant |身份驗證失敗

這讓我發瘋,我無法調試其余代碼。 是否有人經歷過類似的行為,並且已經解決了該問題。 我在App.config啟用了system.diagnostics ,並在兩種情況下將數據流與服務器進行了比較,它們是相同的,逐字節。

問題不在於代碼,而在於開發環境。 VS由於某種原因將TLS1.0用作默認協議,而對於計算機本身則是TLS1.2。在代碼中強制使用TLS1.2,將值設置為ServicePointManager之后,一切開始正常工作。 由於遠程服務器傳遞的接受TLS1.2的錯誤消息不是描述性消息(400錯誤請求),因此花了一些時間才弄清楚。 真正的解決方案是將VS設置為使用協議的默認計算機設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM