using BLL; using BLL.Common; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace FineUIPro.Web { public partial class ssocallback : System.Web.UI.Page { private string code = string.Empty; protected void Page_Load(object sender, EventArgs e) { this.code = Request.Params["code"]; if (string.IsNullOrEmpty(this.code)) { Response.Redirect("~/login.aspx"); return; } var token= GetAccessToken(this.code); var userInfo = getUserInfo(token); if (userInfo == null) { Response.Redirect("~/login.aspx"); return; } Response.Redirect("~/index.aspx"); } private AccessTokenModel GetAccessToken(string _code) { string clientId = "9379ad91-eef9-4956-a1ee-8b04bb3d42c8"; string clientSecret = "iLu8Q~4DRYAn~sMjvO1j.tgRERFWhILvLYRPNc9S"; string grant_type = "authorization_code"; string redirect_url = "http://localhost:6166/ssocallback.aspx"; string scope = "profile openid"; string baseUrl = $" https://login.microsoftonline.com/ecaa386b-c8df-4ce0-ad01740cbdb5ba55/oauth2/v2.0/token"; try { string postData = $"code={code}&client_id={clientId}&client_secret={clientSecret}&grant_type={grant_type}&redirect_uri={redirect_url}&scope={scope}"; string result = BLL.Common.HttpHelper.HttpPostRequest(baseUrl, postData, string.Empty); var Data = JsonConvert.DeserializeObject(result); return Data; } catch (Exception ex) { ErrLogInfo.WriteLog(ex.Message); } return null; } private UserTokenModel getUserInfo(AccessTokenModel token) { string baseUrl = "https://graph.microsoft.com/oidc/userinfo"; try { var result = HttpHelper.HttpGetRequest(baseUrl, token.access_token); if (result.IndexOf("sub") > -1) { var info = JsonConvert.DeserializeObject(result); //写入session信息 //写入cookie信息 return info; } } catch (Exception ex) { //这里报错了,写入日志 BLL.ErrLogInfo.WriteLog(ex.Message); } return null; } } public class UserTokenModel { public string sub { get; set; } public string name { get; set; } public string family_name { get; set; } public string given_name { get; set; } public string picture { get; set; } public string email { get; set; } } }