Example #1
0
        public string GetAuthToken(string id_token, string userAgent)
        {
            string strMessage             = "";
            Tuple <string, string> upnTid = JWTSecurityTokenHelper.ExtractUpnAndTidFromJwtToken(id_token);

            if (upnTid != null)
            {
                ServiceUrl = ApiUrl;
                var form = new Dictionary <string, string>
                {
                    { "grant_type", "password" },
                    { "username", upnTid.Item1 },
                    { "password", upnTid.Item2 },
                };
                bool error;
                AuthenticationToken result = PostToApi <FormUrlEncodedContent, AuthenticationToken>(RMAdminAPI.GetAuthToken + "?product=" + userAgent, new FormUrlEncodedContent(form), out error);

                if (error || (result == null) || (result != null && string.IsNullOrEmpty(result.access_token)))
                {
                    return(strMessage = @"{ 'message': '" + result.error + "', 'status': '" + GlobalConstants.INVALID_TOKEN + "'}");
                }
                else
                {
                    return(strMessage = @"{ 'message': 'Success', 'status': '" + result.access_token + "'}");
                }
            }
            return(@"{ 'message': 'User email is not avaialble', 'status': '" + GlobalConstants.INVALID_TOKEN + "'}");
        }
Example #2
0
        public async Task <ActionResult> Authorize(string id_token, string code, string state, string session_state, string error, string error_description)
        {
            _logger.Info("Authorization complete.");
            AuthState authState = null;

            if (state != null)
            {
                authState = JsonConvert.DeserializeObject <AuthState>(state);
            }
            if (authState == null)
            {
                authState = new AuthState();
            }
            var authContext = new AuthenticationContext(Settings.AzureADAuthority);

            try
            {
                string authCode = code;
                string idToken  = id_token;
                if (!string.IsNullOrEmpty(code))
                {
                    _logger.Info("Got Id_token and authorization code");
                    Tuple <string, string> upnTid = JWTSecurityTokenHelper.ExtractUpnAndTidFromJwtToken(id_token);
                    if (upnTid != null)
                    {
                        CurrentUserName = upnTid.Item1;
                    }

                    Token apiOffice = await TokenHelper.GetAccessToken(authCode, loginRedirectUri.AbsoluteUri, Settings.GraphApiDiscovery);

                    if (apiOffice == null)
                    {
                        _logger.Info("failed to get token for graph api- forcing to failue authentication");
                        authState.authStatus = "failure";
                        authState.message    = "Failed to get authenticate from O365";
                    }
                    else
                    {
                        var tenantUrl = await GraphDiscoveryApi.GetCurrentTenantSiteUrl(apiOffice);

                        GraphAPIToken = apiOffice;

                        string adminApiTokenDetails = _adminApi.GetAuthToken(idToken, Settings.ProductName);
                        // adminApiTokenDetails =
                        dynamic item = JsonHelper.ConvertToObject <object>(adminApiTokenDetails);

                        string adminApiToken = string.Empty;
                        string message       = string.Empty;

                        if (item != null)
                        {
                            message       = item["message"];
                            adminApiToken = item["status"];
                        }
                        if (string.IsNullOrEmpty(adminApiToken) || adminApiToken == GlobalConstants.INVALID_TOKEN)
                        {
                            _logger.Info("API_token is missing and forcing to failure");
                            authState.authStatus = "failure";
                            authState.message    = message;
                        }
                        else
                        {
                            AdminAPIToken      = adminApiToken;
                            AuthorizationCode  = apiOffice.refresh_token;
                            TenantUrl          = tenantUrl;
                            _adminApi.ApiToken = adminApiToken;
                            string userDetail = _adminApi.GetUserDetail(CurrentUserName);
                            if (userDetail != "fail")
                            {
                                CurrentUserDetail = JsonHelper.ConvertToObject <UserModel>(userDetail);
                            }
                            var claims = new List <Claim>();
                            claims.Add(new Claim("id_token", idToken));
                            var id = new ClaimsIdentity(claims, "ApplicationCookie");
                            HttpContext.GetOwinContext().Request.Headers.SetValues("Authorization", new string[] { "Bearer ", adminApiToken });
                            HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties {
                                IsPersistent = true
                            }, id);
                            HttpCookie authCookie = new HttpCookie("ASP.NET_SessionId", Session.SessionID);
                            authCookie.Expires = DateTime.Now.AddMonths(1);
                            Response.Cookies.Add(authCookie);
                            return(RedirectToActionPermanent("Index", "Home", null));
                        }
                    }
                }
                else
                {
                    _logger.Error($"error during login from ad {error} - {error_description}");
                    authState.authStatus = "failure";
                    authState.message    = "Failed to get authenticate from O365";
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex.ToString());
                authState.authStatus = "failure";
                authState.message    = "Technical error";
            }

            _logger.Info($"Authentication Status: {authState.authStatus}");
            await Task.FromResult(0);

            TempData["ErrorLog"] = authState;
            return(RedirectToActionPermanent("Error", "Login"));
        }