通过开发 .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;
}
}
我正在处理一个基于声明的应用程序,目的是在通过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;
}
}