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);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |