我们有一个 Asp.Net-Web-Api 服务器端和wpf(桌面)客户端。
WIF ( Windows Identity Foundation )解决方案是否符合以下条件:
其次(不确定是否正确),
很抱歉,如果问题太宽或有些不清楚或不正确。在花费时间进行实验之前,知道 WIF 解决方案不是我们案例中最好的选择会很有帮助。坦克很多!
答案 0 :(得分:1)
查看基于属性的访问控制模型ABAC(abac)。它是一个更新的模型,它不仅仅是查看角色(RBAC),而是查看以下属性:
ABAC的模型提供
示例:
特别要看一下XACML(xacml)。 XACML提供了一个可应用于.NET应用程序的外部化基于策略的授权解决方案。
提问者(摘自wikipedia)编辑:
答案 1 :(得分:0)
在第一种方法中,感谢Dominick Baier的贡献,我想出了一个自定义ClaimsAuthorizationManager
。似乎可以使用WIF作为解决方案。
还有关于类似问题的帖子this。
首先,我要做的就是检查这样的访问:
authorizationManager.CheckAccess("show_subresources", "resource_org_id", "20d55788-bf46-43f0-b6c5-ccb6be687b90");
我正在检查访问权限。至于在方法上方使用属性[ClaimsPrincipalPermission(....)
]的声明性方法,这似乎在我们的情况下不起作用,因为在获得资源之前不知道resource_organization_id。经理的第一个方法版本如下:
public class AuthorizationManager : ClaimsAuthorizationManager
{
public const string ActionType = "http://application/claims/authorization/action";
public const string ResourceType = "http://application/claims/authorization/resource";
public override bool CheckAccess(AuthorizationContext context)
{
//logic
return false;
}
public bool CheckAccess(string action, params string[] resources)
{
var principal = Thread.CurrentPrincipal as ClaimsPrincipal;
var context = CreateAuthorizationContext(
principal,
action,
resources
);
return CheckAccess(context);
}
private AuthorizationContext CreateAuthorizationContext(ClaimsPrincipal principal, string action, params string[] resources)
{
var actionClaims = new Collection<Claim>
{
new Claim(ActionType, action)
};
var resourceClaims = new Collection<Claim>();
if (resources != null && resources.Length > 0)
{
resources.ToList().ForEach(ar => resourceClaims.Add(new Claim(ResourceType, ar)));
}
return new AuthorizationContext(
principal,
resourceClaims,
actionClaims);
}
}
请注意,我正在使用。{4.0}的Microsoft.IdentityModel
nuget包。
应通过app.config文件实现管理器:
<configuration>
<configSections>
<section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="ClaimsAuthorizationJustATry.AuthorizationManager, ClaimsAuthorizationJustATry"/>
</identityConfiguration>
</system.identityModel>
</configuration>
但我这样做了:
FederatedAuthentication.ServiceConfiguration.ClaimsAuthorizationManager = new AuthorizationManager();