示例#1
0
        /// <summary>
        /// Authenticates a user against the IdSrv
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private static async Task <TokenResponse> AuthenticateUserAsync(string email, string password)
        {
            var idSrvTokenClientOpts = IdSrvTokenClientOpts.InitDefault();

            //netcoreapp2.2
            //var tokenClient = new TokenClient(
            //     $"{idSrvTokenClientOpts.Authority}/connect/token",
            //    idSrvTokenClientOpts.ClientId,
            //    idSrvTokenClientOpts.ClientSecret
            //);

            //try
            //{
            //    return
            //        await
            //            tokenClient.RequestResourceOwnerPasswordAsync(email, password,
            //                idSrvTokenClientOpts.RequiredScopes);
            //}
            //catch (Exception ex)
            //{

            //    return null;
            //}


            //netcore 3.0
            try
            {
                var client = new HttpClient();

                return(await client.RequestPasswordTokenAsync(new PasswordTokenRequest
                {
                    Address = $"{idSrvTokenClientOpts.Authority}/connect/token",

                    ClientId = idSrvTokenClientOpts.ClientId,
                    ClientSecret = idSrvTokenClientOpts.ClientSecret,
                    Scope = idSrvTokenClientOpts.RequiredScopes,

                    UserName = email,
                    Password = password
                }));
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        /// <summary>
        /// Refreshes auth tokens - auth token + refresh token
        /// </summary>
        /// <param name="refreshToken"></param>
        /// <returns></returns>
        private static async Task <TokenResponse> RequestRefreshTokenAsync(string refreshToken)
        {
            var idSrvTokenClientOpts = IdSrvTokenClientOpts.InitDefault();

            //netcoreapp2.2
            //var tokenClient = new TokenClient(
            //    $"{idSrvTokenClientOpts.Authority}/connect/token",
            //    idSrvTokenClientOpts.ClientId,
            //    idSrvTokenClientOpts.ClientSecret
            //);

            //try
            //{
            //    return await tokenClient.RequestRefreshTokenAsync(refreshToken);
            //}
            //catch
            //{
            //    return null;
            //}


            try
            {
                var client = new HttpClient();

                return(await client.RequestRefreshTokenAsync(new RefreshTokenRequest
                {
                    Address = $"{idSrvTokenClientOpts.Authority}/connect/token",

                    ClientId = idSrvTokenClientOpts.ClientId,
                    ClientSecret = idSrvTokenClientOpts.ClientSecret,

                    RefreshToken = refreshToken
                }));
            }
            catch
            {
                return(null);
            }
        }
            /// <summary>
            /// Extracts IdSrvTokenClientOpts from app settings via using the specified key; vakue of this key should be a json serialised IdSrvTokenClientOpts object
            /// </summary>
            /// <param name="cfgKey"></param>
            /// <param name="silent">Whether or not the constructor should throw if unable to deserialise opts object</param>
            public IdSrvTokenClientOpts(string cfgKey, bool silent = true)
            {
                IdSrvTokenClientOpts idSrvTokenClientOpts = null;

                try
                {
                    idSrvTokenClientOpts =
                        JsonConvert.DeserializeObject <IdSrvTokenClientOpts>(ConfigurationManager.AppSettings[cfgKey]);
                }
                catch (Exception ex)
                {
                    if (!silent)
                    {
                        throw;
                    }
                }

                Authority      = idSrvTokenClientOpts?.Authority;
                ClientId       = idSrvTokenClientOpts?.ClientId;
                ClientSecret   = idSrvTokenClientOpts?.ClientSecret;
                RequiredScopes = idSrvTokenClientOpts?.RequiredScopes;
            }
示例#4
0
        /// <summary>
        /// Authenticates a user against the IdSrv
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        private static async Task <TokenResponse> AuthenticateUserAsync(string email, string password)
        {
            var idSrvTokenClientOpts = IdSrvTokenClientOpts.InitDefault();

            var tokenClient = new TokenClient(
                $"{idSrvTokenClientOpts.Authority}/connect/token",
                idSrvTokenClientOpts.ClientId,
                idSrvTokenClientOpts.ClientSecret
                );

            try
            {
                return
                    (await
                     tokenClient.RequestResourceOwnerPasswordAsync(email, password,
                                                                   idSrvTokenClientOpts.RequiredScopes));
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
        public static async Task <AuthOutput> ValidateTokenAsync(string accessToken)
        {
            var idSrvTokenClientOpts = IdSrvTokenClientOpts.InitDefault();

            //GET /connect/accesstokenvalidation?token=<token>

            var client  = new RestClient($"{idSrvTokenClientOpts.Authority}/connect");
            var request = new RestRequest("accesstokenvalidation", Method.GET);

            request.AddQueryParameter("token", accessToken);

            var response = await client.ExecuteTaskAsync <Dictionary <string, string> >(request);

            return(new AuthOutput
            {
                Success = response.StatusCode == HttpStatusCode.OK,
                AccessToken = accessToken,

                //Note: accesstokenvalidation returns expiration in seconds since epoch.
                //Code below should give time in UTC
                AccessTOkenExpirationTimeUtc = new DateTime(1970, 01, 01, 0, 0, 0, DateTimeKind.Utc).AddSeconds(response.Data.ContainsKey("exp") ? long.Parse(response.Data["exp"]) : 0)
            });
        }