using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text; namespace DingDangSDK
{
public class DingdangUserRetriever
{
private String token; private String publicKey;
public DingdangUserRetriever(String token, String publicKey)
{
this.token = token;
this.publicKey = publicKey;
} public User retrieve(bool verify)
{
string result = decode(verify);
User user = JsonConvert.DeserializeObject<User>(result);
return user;
}
public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
public static void Validate(string payloadJson)
{
JObject payloadData = (JObject)JsonConvert.DeserializeObject(payloadJson);//解析json var now = DateTime.UtcNow;
var secondsSinceEpoch = Math.Round((now - UnixEpoch).TotalSeconds); // verify exp claim https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.4
JToken expObj;
if (payloadData.TryGetValue("exp", out expObj))
{
if (expObj == null)
{
//throw new SignatureVerificationException("Claim 'exp' must be a number.");
throw new Exception("Claim 'exp' must be a number.");
} double expValue;
try
{
expValue = Convert.ToDouble(expObj);
}
catch
{
//throw new SignatureVerificationException("Claim 'exp' must be a number.");
throw new Exception("Claim 'exp' must be a number.");
} if (secondsSinceEpoch >= expValue)
{
//throw new TokenExpiredException("Token has expired.")
//{
// Expiration = UnixEpoch.AddSeconds(expValue),
// PayloadData = payloadData
//};
throw new Exception("Token has expired.");
}
} JToken nbfObj;
if (payloadData.TryGetValue("nbf", out nbfObj))
{
if (nbfObj == null)
{
//throw new SignatureVerificationException("Claim 'nbf' must be a number.");
throw new Exception("Claim 'nbf' must be a number.");
} double nbfValue;
try
{
nbfValue = Convert.ToDouble(nbfObj);
}
catch
{
throw new Exception("Claim 'nbf' must be a number.");
} if (secondsSinceEpoch < nbfValue)
{
throw new Exception("Token is not yet valid.");
}
}
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public string decode(bool verify)
{
try
{
JObject obj = (JObject)JsonConvert.DeserializeObject(publicKey);
string[] tokenParts = token.Split('.');
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(
new RSAParameters()
{
Modulus = FromBase64Url(obj["n"].ToString()),
Exponent = FromBase64Url("AQAB")
});
SHA256 sha256 = SHA256.Create();
byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(tokenParts[0] + '.' + tokenParts[1]));
RSAPKCS1SignatureDeformatter rsaDeformatter = new RSAPKCS1SignatureDeformatter(rsa);
rsaDeformatter.SetHashAlgorithm("SHA256");
if (rsaDeformatter.VerifySignature(hash, FromBase64Url(tokenParts[2])))
{
string result = Encoding.UTF8.GetString(Base64UrlDecode(tokenParts[1]));
if (verify)
{
Validate(result);
}
return result;
}
else
{
return null;
}
}
catch (Exception)
{ throw;
} } private static string Base64UrlEncode(byte[] input)
{
var output = Convert.ToBase64String(input);
output = output.Split('=')[0]; // Remove any trailing '='s
output = output.Replace('+', '-'); // 62nd char of encoding
output = output.Replace('/', '_'); // 63rd char of encoding
return output;
} // from JWT spec
private static byte[] Base64UrlDecode(string input)
{
var output = input;
output = output.Replace('-', '+');
output = output.Replace('_', '/');
switch (output.Length % 4)
{
case 0: break; // No pad chars in this case
case 1: output += "==="; break; // Three pad chars
case 2: output += "=="; break; // Two pad chars
case 3: output += "="; break; // One pad char
default: throw new System.Exception("Illegal base64url string!");
}
var converted = Convert.FromBase64String(output); // Standard base64 decoder
return converted;
} static byte[] FromBase64Url(string base64Url)
{
string padded = base64Url.Length % 4 == 0
? base64Url : base64Url + "====".Substring(base64Url.Length % 4);
string base64 = padded.Replace("_", "/")
.Replace("-", "+");
return Convert.FromBase64String(base64);
} }
public class User
{
public String aud { set; get; } public String userId { set; get; } public String name { set; get; } public String email { set; get; } public String openId { set; get; } public String mobile { set; get; } public String exp { set; get; } public String jti { set; get; } public String iat { set; get; } public String nbf { set; get; } public String sub { set; get; } public override String ToString()
{
return "Username{" +
"aud='" + aud + '\'' +
", userId='" + userId + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
", openId='" + openId + '\'' +
", mobile='" + mobile + '\'' +
", exp='" + exp + '\'' +
", jti='" + jti + '\'' +
", nbf='" + nbf + '\'' +
", sub='" + sub + '\'' +
'}';
}
}
}

  

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace AutoUpdate
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
string username;
File.AppendAllText("g:\\log.txt", args[0]+"\r\n");
string id_token = args[0].Substring(20);
//string id_token = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjY1Mzk2NjA3MTQ3ODA5MzY3MzYifQ.eyJlbWFpbCI6IjI2MDI2MyIsIm5hbWUiOiIyNjAyNjMiLCJleHAiOjE1MDY1NjkzMDAsImp0aSI6IjhqakVBRkd0NFo5ZnZNV2JTTWNvVVEiLCJpYXQiOjE1MDY1Njg3MDAsIm5iZiI6MTUwNjU2ODY0MCwic3ViIjoiMjYwMjYzIn0.OwaxyfRiHzgfzsHWHa1I4n5EeTswD1yeh2xHOjWPOt27qXm9Lh2zGLqgfniQU1nZxW7u2FMvESv8oTAq8MFhPX9Jy5LlaU4yfr1HwPS5K_os0oYZpscXqrL4-6OJcQeE0I6AC9ymB5InonDQCQEMuOaijn3VhNpIu4BnJomppcb5IBWJS3VHfJnDxT9JBOf_XRuvS_l1F4BK8nDW7G2QMHMH54-7WarOnFD3DWKexSLNANW_Po458zbI7sYthrft9MnRIk8ctB75ofSUbGjQAjI9b95jYdTKwa9Mu2z3TBNBJXzYe5_WztHgMLfS66IRbEIx0ah2QCZTbK6iTtXEDw";
string publickey = "{\"kty\":\"RSA\",\"kid\":\"6057314195784354233\",\"alg\":\"ES256\",\"n\":\"n7d5K4m_mtYva7fb8x7AQWPQe95fu1LYkxLFlJQOwV-mC2yibqtEC-Tu2hLlSZYloJfDn9ELsGvOwXOkU8ktcvZvxIvnb1tN2rifDyxQfsNf90tt-IglKukVSGBZqM_EI3DHPh6lqmu3LLSvBPKdTAuo2a88vnASv5HDfyjT-9LhHpB4_2_XmI0O8_5sD-gaxlR7DTJ6tRWg7vKnu6gCC3HgG4MsyZZR5TNapUA9rMTrXNQJThrSdjxIVhcSF_XNYVagpt-01h6DvV2pzdNU06Q3p0172BhzFFCOM1gSRi__St9Rgtp1Ax--GxY9UR543ZIA9kTG7cvEIz82Ibx7Vw\",\"e\":\"AQAB\"}"; DingDangSDK.DingdangUserRetriever retriever = new DingDangSDK.DingdangUserRetriever(id_token, publickey);
DingDangSDK.User user = null; //2.获取用户信息
user = retriever.retrieve(false);
username = user.name;
MessageBox.Show(username);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
AppSingleton.Run(new login(args)); //防止对应用程序进行多次实际化
}
}
}

  

http://10.10.6.18:8023/COA.aspx?id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg0NzE1ODg1MTQ5NjgwNjA2MjYifQ.eyJlbWFpbCI6IndhbnFxIiwibmFtZSI6IndhbnFxIiwiZXhwIjoxNTA4MzE4ODMwLCJqdGkiOiJnNVpSbkllc2tNOEZSSjRvRlRSZm9BIiwiaWF0IjoxNTA4MzE4MjMwLCJuYmYiOjE1MDgzMTgxNzAsInN1YiI6IndhbnFxIn0.I1DLYYXJ_PwcTbCrRM0UpQtqLuXrqy5xJol6kuuyQBNQFh57swJj_htkBSf1iRajxG8Oo0Azhq-yTajnxkmvFxrv29jKfYV4Vvk53FPqz2zC9VMI5FNE9dbfdFyAkFibBo-vNmH96j5I8uz19rwJiC3xFwf-4r5bUUeL9vGdCgfemU9Z9xmbKS7gRpS3A7heyZExzHnQyhab0PEFSzED1v1rWVPUR9Wv99xkIaGRBUiuYchGY4kIhaw5SpHP091tZJGMhDjcJDq__cC6FPM-q2hH_vCxBTFHZ7KyQbdz_P3ay3h6zsWEz8ErAdEsBcH_yqdpZF5arKjNqTMzyrGXFQ

  

   public void Tylogin() {
string id_token = "";
string publickey = "{\"kty\":\"RSA\",\"kid\":\"8471588514968060626\",\"alg\":\"ES256\",\"n\":\"4Qa6W-PES5g_STkS2Z4md_XG1UhZUq9JJeMTOC5Yg4RkqULREGj97n6ON-2iWsUl1hlbzzU0n-4l2LZJUrOT0xeaunbo7WOkCiGEwrbpVhvY7fHCi_d4LViJpFZDPIX7h8a_CMjqMSyTesp5SbK7JDzL324g-YsciZV2y8pJeYHgIoauKd6OuOtl5noBOBgz_WrZDkEr6P5TE8_F7TV0CBXWfFSwBSvof7YaVdwOOFFFYrUZVBbqvG5uFreji-V-d2diMgWMaUT3hPBQ7fDY0RE5p5xbqZvYQwgUNVIAmOiHRBB98Mlu-EU-iAHSADYWWp3x6BF0KdojiR34Mb8upw\",\"e\":\"AQAB\"}";
if (Request.QueryString["id_token"] != null)
{
id_token = Request.QueryString["id_token"].ToString();
}
//具体类在Contorls对象中,Contorls对象中添加Newtonsoft.json.dll引用
DdLogin.DingdangUserRetriever c = new DdLogin.DingdangUserRetriever(id_token, publickey);
DdLogin.User Employeeinfo = null;
Employeeinfo = c.retrieve(false); //去掉登录首页直接登录。具体业务逻辑还的重新做
string name = Employeeinfo.name;
Response.Write("用户名:"

  

最新文章

  1. js文件中函数前加分号和感叹号是什么意思?
  2. MAC 如何使用Github Desktop 客户端
  3. PHP基础知识之函数
  4. centos 7.0 编译 安装mysql 5.6.22 过程 已完成~ 成功~ 撒花~
  5. ASP.NET MVC 3 配置EF自动生成模型
  6. sctf pwn300
  7. IOS系统对fixed定位支持不好的解决方法
  8. PowerDesigner创建物理模型
  9. Ubuntu中Qt5.7.0的安装及opencv2.4.13配置
  10. RACSingle 有效的两种方式
  11. 创建,删除DOM
  12. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
  13. 【Python】excel读写操作 xlrd &amp; xlwt
  14. ide phpStorm更换主题
  15. php安全编程&amp;python测试实例编写
  16. 二十四、小程序中改变checkbox和radio的样式
  17. Django 学习第七天——Django模型基础第二节
  18. ESXi 更新补丁 暂时未测试 等有时间尝试一下.
  19. 首次使用Vue开发
  20. 强化学习8-时序差分控制离线算法Q-Learning

热门文章

  1. Characters with Hash[签到题]
  2. docker使用dnnmmp安装gocron
  3. 011 webpack中使用vue
  4. vue中axios使用一:axios做拦截器
  5. [转]怎样与 CORS 和 cookie 打交道
  6. Logstash动态模板映射收集Nginx的Json格式日志
  7. windows mysql 修改配置datadir后 重启报错1067
  8. mysql新建用户host使用%但使用localhost无法连接
  9. DOM事件: DOM事件级别、DOM事件流、DOM事件模型、DOM事件捕获过程、自定义事件
  10. Error: Error occured while starting App. Original error: Activity used to start app doesn&#39;t exist or cannot be launched! Make sure it exists and is a launchable activity