106 lines
3.6 KiB
C#
106 lines
3.6 KiB
C#
using BLL;
|
|
using BLL.Common;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Web.Security;
|
|
|
|
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"];
|
|
//BLL.ErrLogInfo.WriteLog($"获取code={this.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 = Funs.ClientId;
|
|
string clientSecret = Funs.ClientSecret;
|
|
string redirect_url = Funs.Redirect_url;
|
|
string grant_type = "authorization_code";
|
|
string scope = "profile openid";
|
|
string baseUrl = $"https://login.microsoftonline.com/ecaa386b-c8df-4ce0-ad01-740cbdb5ba55/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}";
|
|
//BLL.ErrLogInfo.WriteLog($"请求参数postData={postData}");
|
|
string result = BLL.Common.HttpHelper.PostJsonByHttps(baseUrl, postData);
|
|
//BLL.ErrLogInfo.WriteLog($"请求API Result={result}");
|
|
var Data = JsonConvert.DeserializeObject<AccessTokenModel>(result);
|
|
|
|
return Data;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrLogInfo.WriteLog(ex.Message);
|
|
}
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
private Model.Sys_User getUserInfo(AccessTokenModel token)
|
|
{
|
|
try
|
|
{
|
|
string username = string.Empty;
|
|
string[] toke_split= token.id_token.Split('.');
|
|
var header = Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(toke_split[0]));
|
|
var clamis= Encoding.UTF8.GetString(Base64UrlEncoder.DecodeBytes(toke_split[1]));
|
|
//BLL.ErrLogInfo.WriteLog("clamis=" + clamis);
|
|
JObject jo = JObject.Parse(clamis);
|
|
if (jo["cn"] != null)
|
|
{
|
|
username = jo["cn"].ToString();
|
|
}
|
|
else
|
|
{
|
|
if (jo["preferred_username"] != null)
|
|
{
|
|
string preferred_username = jo["preferred_username"].ToString();
|
|
username = preferred_username.Split('@')[0];
|
|
}
|
|
}
|
|
var info = Funs.DB.Sys_User.Where(t => t.Account == username && t.IsPost == true).FirstOrDefault();
|
|
if (info != null)
|
|
{
|
|
FormsAuthentication.SetAuthCookie(username, false);
|
|
Session[SessionName.CurrUser] = info;
|
|
}
|
|
|
|
return info;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//这里报错了,写入日志
|
|
BLL.ErrLogInfo.WriteLog(ex.Message);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|
|
|
|
} |