首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从非Sitefinity应用程序向基于Sitefinity的站点发送SSO索赔?

如何从非Sitefinity应用程序向基于Sitefinity的站点发送SSO索赔?
EN

Stack Overflow用户
提问于 2016-01-15 17:47:43
回答 1查看 308关注 0票数 1

请帮帮忙。

如何从非Sitefinity应用程序向基于Sitefinity的站点发送索赔。

我有Sitefinity网站用户登录/密码和成员资格提供者名称。

因此,我需要在浏览器中打开Sitefinity站点,我的用户已经登录了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 21:03:17

我使用以下方法创建一个令牌:

代码语言:javascript
复制
    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方法,那么我不需要另外对它进行编码。

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34816874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档