通过开发 .Net Web 服务读取身份验证信息(主体)

Read authentication info (Principal) by developing a .Net Web Service

我正在处理一个基于声明的应用程序,目的是在通过SSO进行身份验证后显示用户信息。

对于给定的经过身份验证的用户,我实现了一个 .Net 网页,其中我显示了从提供的 Principal 开始的所有声明(Page.User),如下:

public partial class ClaimsPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var claimsPrincipal = Page.User as IClaimsPrincipal;
        if (claimsPrincipal != null)
        {
            IClaimsIdentity claimsIdentity = (IClaimsIdentity) claimsPrincipal.Identity;
            // Something else...
        }
    }
}

而且效果很好。

现在,我想做同样的事情,但是使用 .Net Web 服务 (SOAP),而不是网页。

我目前的代码如下:

[WebService(Namespace = "http://myapp/claims")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ClaimsWS : System.Web.Services.WebService
{
    [WebMethod]
    public List<ClaimValues> GetClaims()
    {
        // Get Principal..
        // Read claims...
    }
}

我的问题是:如何获取WebService体内的当前Principal?

或许您可以按照这些思路尝试一下。我正在返回一个 Identity 对象,但您也可以从中获取声明列表。

[WebService(Namespace = "http://myapp/claims")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class ClaimsWS : System.Web.Services.WebService
{
    [WebMethod]
    public List<ClaimValues> GetClaims()
    {
        var principal =ClaimsPrincipal.CreateFromHttpContext(HttpContext.Current); 
        return principal.Claims;
    }
}