35 lines
1.2 KiB
C#
35 lines
1.2 KiB
C#
using Microsoft.Owin.Security.Infrastructure;
|
|
using System;
|
|
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
|
|
namespace LDX.WebApi.Providers
|
|
{
|
|
public class OpenAuthorizationCodeProvider : AuthenticationTokenProvider
|
|
{
|
|
private readonly ConcurrentDictionary<string, string> _authenticationCodes = new ConcurrentDictionary<string, string>(StringComparer.Ordinal);
|
|
|
|
/// <summary>
|
|
/// 生成 authorization_code
|
|
/// </summary>
|
|
public override void Create(AuthenticationTokenCreateContext context)
|
|
{
|
|
context.SetToken(Guid.NewGuid().ToString("n") + Guid.NewGuid().ToString("n"));
|
|
_authenticationCodes[context.Token] = context.SerializeTicket();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 由 authorization_code 解析成 access_token
|
|
/// </summary>
|
|
public override void Receive(AuthenticationTokenReceiveContext context)
|
|
{
|
|
string value;
|
|
if (_authenticationCodes.TryRemove(context.Token, out value))
|
|
{
|
|
context.DeserializeTicket(value);
|
|
}
|
|
}
|
|
}
|
|
} |