예제 #1
0
        protected override async Task ApplyResponseGrantAsync()
        {
            // only successful results of an authorize request are altered
            if (_clientContext == null ||
                _authorizeEndpointRequest == null ||
                Response.StatusCode != 200)
            {
                return;
            }

            // only apply with signin of matching authentication type
            AuthenticationResponseGrant signin = Helper.LookupSignIn(Options.AuthenticationType);

            if (signin == null)
            {
                return;
            }


            DateTimeOffset currentUtc = Options.SystemClock.UtcNow;

            signin.Properties.IssuedUtc  = currentUtc;
            signin.Properties.ExpiresUtc = currentUtc.Add(Options.AccessTokenExpireTimeSpan);

            // associate client_id with access token
            signin.Properties.Dictionary[Constants.Extra.ClientId] = _authorizeEndpointRequest.ClientId;

            var accessTokenContext = new AuthenticationTokenCreateContext(
                Context,
                Options.AccessTokenFormat,
                new AuthenticationTicket(signin.Identity, signin.Properties));

            await Options.AccessTokenProvider.CreateAsync(accessTokenContext);

            string accessToken = accessTokenContext.Token;

            if (string.IsNullOrEmpty(accessToken))
            {
                accessToken = accessTokenContext.SerializeTicket();
            }

            DateTimeOffset?accessTokenExpiresUtc = accessTokenContext.Ticket.Properties.ExpiresUtc;

            var authResponseContext = new OAuthAuthenticatedTokenContext(
                Context,
                accessToken);

            await Options.Provider.Authenticated(authResponseContext);
        }
 /// <summary>
 /// Invoked whenever succesfully authenticates a user
 /// </summary>
 public Task Authenticated(OAuthAuthenticatedTokenContext context)
 {
     return(OnAuthenticated(context));
 }