天道酬勤,学无止境

有没有办法使用 ASP.NET Identity 授权 servicestack?(Is there a way to authorise servicestack with ASP.NET Identity?)

问题

我发现的 ASP.NET MVC 和 Servicestack 之间相互身份验证的唯一示例涉及使用 Servicestack 的内置身份验证并为旧的 MVC 表单身份验证设置 cookie。

我很感兴趣,如果有可能扭转这一局面并使用新的 ASP.NET 身份系统授权 servicestack 服务。

原因是我希望有一个简单的身份验证故事并使用相同的属性,例如来自 Identity 的 [Authorize] [AllowAnonymous] 和 servicestack API。

我没有使用 Identity 或 servicestack 插件的经验,所以如果其他人也有同样的想法,那就太好了。

回答1

我用我自己的 AuthorizeAttribute 装饰了我的 servicestack 服务,它连接到现有的 asp.net。 也许这会帮助你。

public class ServiceStackToAspNetAuthorizeAttribute : RequestFilterAttribute
{
    private string _roles;
    private string[] _rolesSplit = new string[0];

    public string Roles
    {
        get { return _roles ?? String.Empty; }
        set
        {
            _roles = value;
            _rolesSplit = SplitString(value);
        }
    }

    public ServiceStackToAspNetAuthorizeAttribute(ApplyTo applyTo)
        : base(applyTo)
    {
        this.Priority = (int)RequestFilterPriority.Authenticate;
    }

    public ServiceStackToAspNetAuthorizeAttribute()
        : this(ApplyTo.All) { }


    public override void Execute(IRequest req, IResponse res, object requestDto)
    {
        if (!InternalAuthorize())
        {
            res.StatusCode = (int)HttpStatusCode.Unauthorized;
            res.EndRequest();
        }
    }

    private bool InternalAuthorize()
    {
        var context = HttpContext.Current;
        if (context != null)
        {
            var user = context.User;
            if (user != null)
            {
                if (!user.Identity.IsAuthenticated)
                    return false;
                if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
                    return false;
                return true;
            }
        }
        return false;
    }

    private static string[] SplitString(string original)
    {
        if (String.IsNullOrEmpty(original))
        {
            return new string[0];
        }

        var split = from piece in original.Split(',')
                    let trimmed = piece.Trim()
                    where !String.IsNullOrEmpty(trimmed)
                    select trimmed;
        return split.ToArray();
    }

}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在 Active Directory/Windows 身份验证中使用 Servicestack 身份验证?(How to use Servicestack Authentication with Active Directory/Windows Authentication?)
    问题 我正在创建一个安全 (SSL) 公共服务,其中用户凭据驻留在 Active Directory 中。 我想利用 ServiceStack 的身份验证并阅读了 wiki 文章。 我已经编写了代码来使用 AD 验证用户凭据。 我有几个问题。 我使用哪个身份验证提供程序? 凭据、基本身份验证还是自定义? 该服务需要 SSL,因此基本身份验证是安全的,但密码将被加密以增加安全性。 我还需要存储 UserAuth 并缓存 AuthUserSession 吗? 单点触控客户端是否支持身份验证? 更新 2:我最终使用 CredentialsAuthProvider 制作了一个与 AD 集成的测试 SS 服务。 然而,我的最终目标是拥有 1 个站点,当客户端调用时它是一个 api。 所以基本上是一个 SS MVC 站点。 更新: 在做了更多研究后,我了解到 SS 正在考虑做一个未来可能支持 Windows 身份验证的商业产品。 我在 SS Google 小组 mythz 的评论中读到了这一点。 我问这个 SO 问题的原因是我的公司使用 IWA 构建内部应用程序,如果没有 IWA,很难采用 SS MVC。 我想我读到您可以从使用 IWA 的 ASP.NET 站点托管 SS MVC 站点,但我还没有尝试过。 回答1 我还将 ServiceStack 与集成 Windows 身份验证
  • Is there a way to authorise servicestack with ASP.NET Identity?
    The only example I have found of mutual authentication between ASP.NET MVC and Servicestack involves using Servicestack's built in authentication and setting the cookie for old MVC Forms authentication. I am interested if it is possible to flip this around and authorise servicestack services with the new ASP.NET Identity system. The reason being that I would IDEALLY like to have a simple authentication story and use the same attributes, such as [Authorize] [AllowAnonymous] from Identity with the servicestack API. I don't have experience with either Identity or servicestack plugins so it would
  • ServiceStack API 和 ASP MVC Authentication 两种方式(ServiceStack API and ASP MVC Authentication in two ways)
    问题 我在解决通过 ServiceStack 为 html 页面和 Web 服务提供服务的 ASP MVC 应用程序的架构时遇到了问题。 应用程序位于基本 url 中,例如“http://myapplication.com”,而 SS 位于“http://myapplication.com/api”中,因为这是配置两者的最简单方法。 一般来说,一切正常,但是当我到达授权和身份验证的部分时,我被卡住了。 一方面,我需要应用程序处理 cookie,因为 ASP 通常通过 FormsAuthentication 进行,并且用户将通过登录屏幕并在使用属性“授权”时可以使用操作和控制器。 这是典型的 ASP,所以我对它没有问题,例如“http://myapplication.com/PurchaseOrders”。 另一方面,我的应用程序的客户端将从 javascript 使用我的 Web 服务 api。 在某些情况下,这些 Web 服务也将使用 ServiceStack 的“身份验证”属性进行标记。 例如,“http://myapplication.com/api/purchaseorders/25”必须验证用户是否可以查看该特定采购订单,否则发送 401 Unauthorized 以便 javascript 可以处理这些情况并显示错误消息。 最后但并非最不重要的一点是
  • 如何通过DotNetOpenAuth使用OAuth2访问令牌授权对ServiceStack资源的访问?(How do I authorize access to ServiceStack resources using OAuth2 access tokens via DotNetOpenAuth?)
    问题 我使用DotNetOpenAuth创建了OAuth2授权服务器,该服务器工作正常-我正在使用资源所有者密码流,并成功将用户凭据交换为访问令牌。 我现在想使用该访问令牌从ServiceStack API中的安全终结点检索数据,但我不知道该怎么做。 我已经检查了ServiceStack附带的Facebook,Google等提供程序,但尚不清楚我是否应该遵循相同的模式。 我想达到的目标(我认为!)是 OAuth客户端(我的应用程序)向资源所有者(“凯瑟琳·史密斯”)询问凭据客户端向授权服务器提交请求,接收访问令牌客户端从资源服务器请求安全资源( GET /users/csmith/photos ) 访问令牌包含在HTTP标头中,例如Authorization: Bearer 1234abcd... 资源服务器解密访问令牌以验证资源所有者的身份资源服务器检查资源所有者是否有权访问所请求的资源资源服务器返回的资源给客户端 第1步和第2步正在工作,但是我无法弄清楚如何将DotNetOpenAuth资源服务器代码与ServiceStack授权框架集成在一起。 我在某个地方有一个实现此目标的示例吗? 我在如何使用ServiceStack作为OAuth2.0的资源服务器来构建安全的api上找到了类似的StackOverflow帖子。 但这不是一个完整的解决方案
  • AngularJs + ServiceStack 应用程序的安全性(Security for an AngularJs + ServiceStack App)
    问题 我有一个前端有四个模块的应用程序,我试图在前端尽可能多地使用 AngularJs 我正在使用一个空的网站 asp.net 项目来托管所有文件和 REST serviceStack,我的项目具有以下结构: ~/ (web.config, global.asax and all the out of the box structure for an asp.net website) - App <- AngularJs - Users <- js controllers and views (static html files) - Companies - BackEnd - Public Index.html IndexCtrl.js App.js - Content - Js 我使用 angularjs 服务调用和后端我使用 REST 和 servicestack。 问题是我如何才能限制只有经过身份验证的用户才能访问这些静态 html 文件? 例如,假设公司、后端和用户内部的那些 回答1 嗨,经过一些研究,这是对我有用的解决方案: 从 nuget 安装剃刀降价更改文件结构以匹配默认行为 RM [Razor Markdown] 到 /views 按照此服务堆栈示例中描述的方法修改 Web 配置将所有静态 htmls 文件更改为 .cshtml 文件
  • 检查 SignalR 属性中的授权(Check authorize in SignalR attribute)
    问题 我在 ServiceStack 上有一些服务并在这个项目中使用 SignalR。 现在,我想保护集线器连接(仅限经过身份验证的用户访问),但我使用 ServiceStack 框架身份验证..(不是 asp.net 身份验证)和 ServiceStack 的会话(在此会话和身份验证标志中写入 AuthUserId)。 因此,当用户尝试连接到集线器时——集线器必须检查身份验证...... (是的,我可以从集线器请求 Cookie(例如方法 OnConnected),但是 SignalR 在授权属性中检查身份验证 - 我必须在这个类中(而不是在集线器中) (http://www.asp.net/signalr/overview/signalr-20/security/hub-authorization) 所以,我创建类 [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] public class AuthorizeMyAttribute : AuthorizeAttribute { protected override bool UserAuthorized(System.Security.Principal.IPrincipal user) { //... how
  • 启用Windows身份验证的IIS中针对CORS请求的401响应(401 response for CORS request in IIS with Windows Auth enabled)
    问题 我试图在我的WebAPI项目中启用CORS支持,并且如果启用了匿名身份验证,那么一切正常,但是使用Windows Auth +禁用匿名身份验证,发送的OPTIONS请求始终返回401未经授权的响应。 要求它的站点位于DOMAIN上,因此应该可以拨打电话,在不禁用Windows身份验证的情况下,有什么方法可以解决此问题? 回答1 您只能为匿名用户允许使用OPTIONS动词。 <system.web> <authentication mode="Windows" /> <authorization> <allow verbs="OPTIONS" users="*"/> <deny users="?" /> </authorization> </system.web> 根据W3C规范,浏览器从CORS预检中排除了用户凭据:https://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#preflight-request 回答2 几年后,但是通过@dariusriggins和@ lex-li的回答,我设法将以下代码添加到我的Global.asax中: public void Application_BeginRequest(object sender, EventArgs e) { string httpOrigin = Request
  • ASP.NET WebAPI +肥皂(ASP.NET WebAPI + Soap)
    问题 WebAPI是否支持SOAP? 我正在尝试用MVC4编写SOAP服务器,尽管我可以在WCF中完成它,但似乎WebAPI正在取代它,但是我还没有办法在其中使用SOAP,仅是使用REST风格接口的JSON / XML。 回答1 引用斯科特·古思里(Scott Guthrie)的话:过去几年中,Web API的兴起-通过纯HTTP而不是通过更正式的服务合同(例如SOAP或WS *)公开的服务。 所以我会说不。 回答2 您应该考虑查看ServiceStack,它允许您的同一服务支持REST + SOAP API,尽管由于SOAP仅通过HTTP POST起作用,所以它有一些限制。 添加ServiceStack参考 作为SOAP的替代方案,ServiceStack提供了WCF的“添加服务引用”的更好替代方案,后者可以使用ServiceStackVS内置的“添加ServiceStack引用”功能从URL生成类型化的API。 与WCF相比的优势 简单使用小型T4模板保存生成的POCO类型。 更新和重新运行T4模板一样容易多功能Clean DTO可在所有JSON,XML,JSV,MsgPack和ProtoBuf通用服务客户端中使用可重用的生成的DTO不会耦合到任何端点或格式。 默认设置为部分设置和虚拟设置,以实现最大程度的重用与RPC服务相比
  • 有没有办法让 ServiceStack 在 Silverlight 客户端上反序列化复杂类型?(Is there any way to get ServiceStack to deserialize complex types on a Silverlight client?)
    问题 我想反序列化来自 Silverlight 客户端的 JSON 响应。 我在可移植类库中有我的 DTO,从服务器和客户端都引用。 public class MyDTOResponse { public IEnumerable<MyType> ResponseData {get; set; } } 当我使用 ServiceStack C# 客户端(即不是来自 Silverlight)时,一切正常:MyType 在客户端上得到水合。 然而,来自 Silverlight 的 ResponseData 为空。 Silverlight 中的简单类型也能正常工作。 例如,这有效: public class MyDTOResponse { public IEnumerable<string> ResponseData {get; set; } } 注意:DTO 上没有注释。 在客户端,我使用: var serviceClient = new ServiceStack.ServiceClient.Web.JsonServiceClient(baseUri); 我的解决方法是更改​​ DTO,使它们仅使用简单类型,然后在客户端手动混合我的业务对象。 我能做得比这更好吗? 回答1 尝试将 [DataContract] 属性添加到类 MyDTOResponse 并将 [DataMember]
  • ASP.NET 标识:使用角色授权属性在 Azure 上不起作用(ASP.NET Identity: Authorize attribute with roles doesn't work on Azure)
    问题 我刚刚在 Azure 上发布了带有 Identity 和 OWIN 授权的新 ASP.NET MVC 网站。 前端效果很好,但后端有问题。 我将 [Authorize] 属性与我的管理控制器一起使用来检查用户是否具有访问它所需的角色,如下所示: [Authorize(Roles = "Admin")] 在本地主机上,即使使用远程 Azure SQL 数据库也能正常工作。 但是在 Azure 上,任何具有授权属性且角色加载几分钟然后抛出的控制器: 与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。 服务器未找到或无法访问。 验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例) 没有角色的授权属性工作正常。 回答1 将此代码添加到 web.config 可解决此问题。 <system.webServer> <modules> <remove name="RoleManager" /> </modules> </system.webServer> 我知道现在已经晚了,但我有一个真正的答案给你。 我想无论如何我都会分享它,因为我自己只是浪费了几个小时。 从这篇文章中找到的信息 回答2 没有真正解决 Azure 的问题,最后写了我自己的 Authorization 属性。
  • ASP .NET Identity中的要求是什么(What is the claims in ASP .NET Identity)
    问题 有人可以解释一下,声明机制在新的ASP.NET Identity Core中意味着什么吗? 如我所见,有一个AspNetUserLogins表,其中包含UserId , LoginProvider和ProviderKey 。 但是,我仍然无法理解或找到有关何时将数据添加到AspNetUserClaims表中以及该表用于什么情况的任何信息? 回答1 声明机制在新的ASP.NET Identity Core中意味着什么? 有两种基于角色和声明的常见授权方法。 基于角色的安全性 用户被分配到一个或多个角色,通过该角色用户可以获得访问权限。 同样,通过将用户分配给角色,用户可以立即获得为该角色定义的所有访问权限。 基于声明的安全性 基于声明的身份是一组声明。 声明是一个实体(用户或另一个应用程序)关于自身的声明,它只是一个声明。 例如,声明列表可以包含用户的姓名,用户的电子邮件,用户的年龄,用户对某项操作的授权。 在基于角色的安全性中,用户将凭据直接提供给应用程序。 在基于声明的模型中,用户向应用程序提供声明而不是凭据。 为了使声明具有实用价值,它必须来自应用程序信任的实体。 以下步骤说明了在基于声明的安全模型中发生的顺序: 用户请求一个动作。 依赖方(RP)应用程序请求令牌。 用户将凭证提供给RP应用程序信任的颁发机构。 在对用户的凭据进行身份验证之后
  • 在Linux / Mono上运行ServiceStack的最佳方法是什么?(What is the best way to run ServiceStack on Linux / Mono?)
    问题 在ServiceStack网站上列出,它表明ServiceStack可以在Mono上运行,并且可以: XSP mod_mono FastCgi 安慰 这些不同的配置是什么?Mono上的Web Services首选哪种配置? 回答1 Linux更新 从v4.5.2版本开始,ServiceStack现在支持.NET Core,它比Mono有了显着的性能和稳定性改进,Mono是从共享的跨平台代码库派生的,并得到了Microsoft的资源丰富,活跃且响应迅速的团队的支持。 如果您当前在Mono上运行ServiceStack,我们强烈建议升级到.NET Core,以利用其卓越的性能,稳定性和自上而下支持的技术堆栈。 单声道更新 我们建议在Linux和Mono上托管ASP .NET网站的安装程序是使用nginx / HyperFastCgi。 我们已经发布了分步指南,从头开始创建一个Ubuntu VM,并在mono-server-config上完成了deploy / install / conf / init脚本。 在注意到几个稳定性和性能问题后,我们不再建议使用MonoFastCGI。 这篇博客文章对Mono中不同ASP.NET Hosting选项的性能,内存使用情况和稳定性进行了很好的分析。 发展 XSP与VS.NET WebDev服务器类似-VS.NET WebDev服务器是用C
  • ASP.NET Identity,立即将另一个用户添加到角色(他们不必注销并再次登录)(ASP.NET Identity, add another user to role instantly (they don't have to log out and in again))
    问题 首先,我知道这个问题:MVC 5 AddToRole 需要注销才能工作? 还有这个:ASP.NET Identity 的 IUserSecurityStampStore<TUser> 接口是什么? 所以请不要将此标记为重复。 我正在尝试将另一个用户添加到角色(即我们添加到角色的用户不是当前用户。如果是,我链接到的第一个问题的答案就足够了。) 像这样: IdentityResult result = await userManager.AddToRoleAsync(userID, roleName); 我这样做的两种情况是:从管理页面,当前用户是管理员; 以及使用基本身份验证(根本没有当前用户)保护的 webhook。 问题:如果此更改适用的用户已登录并使用该应用程序,我需要立即应用“添加到角色”更改。 他们不应该为了更改发生而退出并再次登录,并且需要立即发生。 谢谢大家。 编辑:顺便说一下, User.IsInRole(roleName) 需要注销和登录以反映被添加到新角色。 UserManager.IsInRole(userID, roleName) 没有,因为(我假设)它直接进入数据库表进行检查。 但是如果用户点击了一个由他们刚刚添加的角色保护的操作方法,他们仍然需要再次登录,这很公平。 仍然很好奇是否有办法解决这个问题。 编辑:这是授权属性的源代码:https:/
  • 配置授权服务器端点(Configure the authorization server endpoint)
    问题 问题 我们如何在使用用户名和密码流的ASP.NET 5中使用承载令牌? 对于我们的方案,我们希望让用户使用AJAX调用进行注册和登录,而无需使用外部登录。 为此,我们需要一个授权服务器端点。 在ASP.NET的ourdomain.com/Token版本中,我们将执行以下操作,然后登录到ourdomain.com/Token URL。 // Configure the application for OAuth based flow PublicClientId = "self"; OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"), Provider = new ApplicationOAuthProvider(PublicClientId), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14) }; 但是,在当前版本的ASP.NET中,上述方法不起作用。 我们一直在尝试找出新方法。 例如,GitHub上的aspnet / identity示例配置了Facebook,Google和Twitter身份验证,但似乎没有配置非外部OAuth授权服务器终结点
  • asp.net webapi动态授权(asp.net webapi dynamic authorization)
    问题 我是 webapi 和 mvc 的新手,我正在努力寻找基于角色和资源所有权动态处理授权的最佳实践。 例如,应允许员工管理员、员工呼叫中心或拥有客户的帐户页面获取、发布、放置或删除帐户信息。 因此,管理员和呼叫中心员工应该能够获取、发布、放置或删除对任何用户 ID 的任何请求,但客户端应该只能对他们拥有的资源执行这些操作。 例如,Tom 是 UserID 10,Jerry 是 UserID 20。 /api/Account/10 应该可以被任何管理员、呼叫中心或 Tom 访问。 杰瑞应该被踢出去。 /api/Account/20 应该可以被任何管理员、呼叫中心或 Jerry 访问。 汤姆应该被踢出去。 在 webforms 中,典型的解决方案是检查用户是否是客户端并根据请求验证他们的 id。 (我知道 AuthorizeAttribute 不在 webforms 中,但作为一个例子显示了它在 webapi/mvc 中的隐藏内容。) [Authorize(Roles = "Administrator, CallCenter, Client")] public string Get(int userID) { if (Thread.CurrentPrincipal.IsInRole("Client") && Thread.CurrentPrincipal.Identity
  • 如何在 Web 窗体中使用 ASP.NET Identity 授权角色?(How to authorize roles with ASP.NET Identity in Web Forms?)
    问题 我如何授权一个页面只允许具有特定角色的用户登录? 我没有使用 MVC,我不能使用 [Authorize(Roles="Admin")] 属性。 回答1 您将使用Web.config来配置访问: <configuration> <!-- Allow only Administrators to visit RoleBasedAuthorization.aspx --> <location path="RoleBasedAuthorization.aspx"> <system.web> <authorization> <allow roles="Administrators"/> <deny users="*" /> </authorization> </system.web> </location> </configuration>
  • .NET Core身份服务器4身份验证VS身份身份验证(.NET Core Identity Server 4 Authentication VS Identity Authentication)
    问题 我正在尝试了解在ASP.NET Core中进行身份验证的正确方法。 我看了几个资源(其中大多数已过时)。 微软身份的简单实现 ASP.Core身份验证简介 MSDN身份简介 有人提供替代性解决方案,说明要使用基于云的解决方案(例如Azure AD),或者使用IdentityServer4并托管我自己的令牌服务器。 在旧版本的.Net中,身份验证的一种较简单形式是创建自定义原则,并在其中存储其他身份验证用户数据。 public interface ICustomPrincipal : System.Security.Principal.IPrincipal { string FirstName { get; set; } string LastName { get; set; } } public class CustomPrincipal : ICustomPrincipal { public IIdentity Identity { get; private set; } public CustomPrincipal(string username) { this.Identity = new GenericIdentity(username); } public bool IsInRole(string role) { return Identity != null &&
  • ASP.NET MVC-如何在登录页面上显示未经授权的错误?(ASP.NET MVC - How to show unauthorized error on login page?)
    问题 在我的ASP.NET MVC应用中,大多数控制器都装饰有 [Authorize(Roles="SomeGroup")] 当用户无权访问某项内容时,他们将被发送到“〜/登录”,这是我的帐户控制器上的“登录”操作。 如何确定用户由于未获得授权而已进入登录页面,从而可以显示适当的错误? 回答1 您可以查找?ReturnUrl= querystring值,也可以创建自己的授权过滤器并在TempData设置一个指示原因的字段。 这是一个简单的自定义过滤器,可以解决这个问题: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] public class CustomAuthorizeAttribute : AuthorizeAttribute { // NOTE: This is not thread safe, it is much better to store this // value in HttpContext.Items. See Ben Cull's answer below for an example. private bool _isAuthorized; protected override bool AuthorizeCore(System.Web.HttpContextBase
  • ASP.NET Identity:授权后更新外部声明(ASP.NET Identity: Update external claims after authorization)
    问题 我将 ASP.NET Identity 与多个外部登录提供程序一起使用,我需要处理以下场景: 1) 用户使用外部服务登录(假设它是 Facebook),应用程序从 Facebook 获取一些信息(名字和姓氏、电子邮件、出生日期等...)包含此信息的声明被添加到身份中. 2)我需要将此信息存储在应用程序数据库中,用于以下场景: 管理员浏览注册用户列表电子邮件订阅服务将使用名字和姓氏 ... 问题是用户是否会更新他/她的 Facebook 个人资料(例如,更改电子邮件地址) - 在这种情况下,我也需要更新我的数据库中的信息(我将外部声明存储在 AspNetUserClaims 表中)。 实际上,每次外部用户通过身份验证时,我都需要更新它。 这是第一次保存的代码: 扩展声明类: public class ApplicationUserClaim : IdentityUserClaim<Guid> { public string Issuer { get; set; } public string ClaimValueType { get; set; } } 启动: var facebookOptions = new FacebookAuthenticationOptions { AppId = "...", AppSecret = "...", Provider = new
  • 在ASP.NET Identity中添加角色(Add role in ASP.NET Identity)
    问题 如何在新的ASP.NET Identity系统(1.0)中添加角色? 没有UserStore类,但没有RoleStore类。 我找不到有关此问题的任何文档。 回答1 RoleManager = new RoleManager<IdentityRole>( new RoleStore<IdentityRole>(new MyDbContext())); var roleresult = RoleManager.Create(new IdentityRole(roleName)); 回答2 从.NET Framework 4.5开始,Windows Identity Foundation(WIF)已完全集成到.NET Framework中。 我建议检查一下我认为更可取的方法,以通过索偿(将作用表现为索偿)实施授权。 调用IsInRole()方法时,将进行检查以查看当前用户是否具有该角色。 在声明感知应用程序中,角色由应在令牌中可用的角色声明类型表示。 角色声明类型使用以下URI表示:“ http://schemas.microsoft.com/ws/2008/06/identity/claims/role” 因此,可以从UserManager中执行以下操作(无需RoleManager): var um = new UserManager(); um.AddClaimAsync(1