public ActionResult ExternalLoginCallback(string returnUrl)
        {
            //例子: Step 1 : 重写请求
            TiupSso.RewriteRequest();

            AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

            if (!result.IsSuccessful)
            {
                return(RedirectToAction("ExternalLoginFailure"));
            }

            if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
            {
                return(RedirectToLocal(returnUrl));
            }
            if (User.Identity.IsAuthenticated)
            {
                // 如果当前用户已登录,则添加新帐户
                OAuthWebSecurity.CreateOrUpdateAccount(result.Provider, result.ProviderUserId, User.Identity.Name);
                return(RedirectToLocal(returnUrl));
            }
            else
            {
                // 该用户是新用户,因此将要求该用户提供所需的成员名称

                string loginData = OAuthWebSecurity.SerializeProviderUserId(result.Provider, result.ProviderUserId);
                ViewBag.ProviderDisplayName = OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
                ViewBag.ReturnUrl           = returnUrl;

                //例子: Step 2 : 将 response_string 作为附加信息,传入到账户创建界面, 便于选择学校
                var     responseString = result.ExtraData["response_string"];
                var     schoolCode     = result.ExtraData["school_code"];
                dynamic response       = JsonConvert.DeserializeObject <dynamic>(responseString);
                var     schools        = response.data.school_accounts;
                var     schoolAccounts = new List <RegisterExternalLoginSchoolAccountModel>();
                var     etst           = schools.Count;

                for (var i = 0; i < schools.Count; i++)
                {
                    //TODO: 过滤学校内容, 可根据开发者的schoolCode, 列出符合条件的学校, 注释掉可列出所有学校
                    if (schools[i].school_code != schoolCode)
                    {
                        continue;
                    }
                    var school = new RegisterExternalLoginSchoolAccountModel {
                        Id = schools[i].id, SchoolId = schools[i].school_id, UserId = schools[i].user_id, UserName = schools[i].username, SchoolCode = schools[i].school_code, DisplaySchoolAccount = "学校:" + schools[i].school_code + " 帐号:" + schools[i].username
                    };
                    schoolAccounts.Add(school);
                }
                return(View("ExternalLoginConfirmation", new RegisterExternalLoginModel {
                    UserName = result.UserName, ExternalLoginData = loginData, SchoolAccounts = schoolAccounts
                }));
            }
        }
Beispiel #2
0
        public static void RegisterAuth()
        {
            var extraData = new Dictionary <string, string>();

            //input your extra data
            extraData["school_code"] = "ruc";
            extraData["theme"]       = "schools";
            extraData["sso"]         = "true";
            //input your appId and  app secret
            var client = new TiupSso("Your AppId", "You App Secret", extraData, new[] { "all" });

            OAuthWebSecurity.RegisterClient(client, "Tiup.cn", null);
        }