ASP.NET OAuth:access token的加密解密,client secret与refresh token的生成
在 ASP.NET OWIN OAuth(Microsoft.Owin.Security.OAuth)中,access token 的默认加密方法是:
1) System.Security.Cryptography.DpapiDataProtector.Protect() 2) Convert.ToBase64String() 3) .TrimEnd('=').Replace('+', '-').Replace('/', '_');
access token 的默认解密方法是:
1) System.Security.Cryptography.DpapiDataProtector.Unprotect() 2) Pad(text.Replace('-', '+').Replace('_', '/')); 3) Convert.FromBase64String()
上面代码中用到的 Pad 方法的实现代码如下:
private static string Pad(string text) { var padding = 3 - ((text.Length + 3) % 4); if (padding == 0) { return text; } return text + new string('=', padding); }
对于 client secret 与 refresh token 的生成,OWIN OAuth 没有提供现成的方法,我们用的是 RNGCryptoServiceProvider,代码如下:
RandomNumberGenerator cryptoRandomDataGenerator = new RNGCryptoServiceProvider(); byte[] buffer = new byte[96]; cryptoRandomDataGenerator.GetBytes(buffer); string secretOrToken = Convert.ToBase64String(buffer) .TrimEnd('=').Replace('+', '-').Replace('/', '_');
【参考资料】