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