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('/', '_');

【参考资料】

Katana source code

How to generate OAuth 2 Client Id and Secret

posted @ 2015-07-14 23:30 dudu 阅读(...) 评论(...) 编辑 收藏