如何从非 Sitefinity 应用程序向基于 Sitefinity 的站点发送 SSO 声明
本文关键字:Sitefinity 站点 声明 SSO 应用程序 | 更新日期: 2023-09-27 18:30:43
请帮忙。
如何从非 Sitefinity 应用程序向基于 Sitefinity 的网站发送声明。
我有 Sitefinity 网站用户登录名/密码和会员提供商名称。
因此,我需要在我的用户已经登录的情况下在浏览器中打开 Sitefinity 网站。
我使用以下方法创建一个令牌:
private string CreateToken(string name)
{
var key = this.HexToByte("... here is the same hexadecimal code that is specified in SecurityConfug.config file in securityTokenIssuers tag ... ");
var sb = new StringBuilder();
// here I'm adding info from claims, only these two claims are needed
sb.AppendFormat("{0}={1}&", UrlEncode(ClaimTypes.Name), name);
sb.AppendFormat("{0}={1}&", UrlEncode("http://schemas.sitefinity.com/ws/2011/06/identity/claims/domain"), "Default");
sb
.AppendFormat("TokenId={0}&", UrlEncode(Guid.NewGuid().ToString()))
.AppendFormat("Issuer={0}&", UrlEncode("http://localhost"))
.AppendFormat("Audience={0}&", UrlEncode("http://localhost"))
.AppendFormat("ExpiresOn={0:0}", (DateTime.UtcNow.AddDays(1) - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds );
var unsignedToken = sb.ToString();
var hmac = new HMACSHA256(key);
var sig = hmac.ComputeHash(Encoding.ASCII.GetBytes(unsignedToken));
string signedToken = String.Format("{0}&HMACSHA256={1}",
unsignedToken,
UrlEncode(Convert.ToBase64String(sig)));
return signedToken;
}
private byte[] HexToByte(string hexString)
{
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
然后我通过 GET 或 POST 方法将我的令牌作为名为 wrap_access_token 的参数发送。如果我使用 GET 方法,则使用以下方法对令牌进行编码。如果我使用 POST 方法,那么我不需要额外编码它。
var token = CreateToken(login);
var wrapped_token = UrlEncode(token);
Response.Redirect(baseUrl + "/?wrap_access_token=" + wrapped_token);
private string UrlEncode(string input)
{
var encodedInput = WebUtility.UrlEncode(input);
encodedInput = Regex.Replace(encodedInput, "(%[0-9A-F]{2})", c => c.Value.ToLowerInvariant());
return encodedInput;
}