asp.net - 在 Web 应用程序中使用身份验证和授权声明的实际工作流程是什么?

标签 asp.net asp.net-mvc claims-based-identity

我只是没有得到基于声明的身份验证/授权工作流程。

应用程序允许通过 Facebook.com 进行身份验证

用户通过身份验证后,管理员可以给她/他一个拥有经理角色的声明,这会创建另一个声明(在哪里?)

当然,这个声明不会出现在 facebook.com 服务器上,问题 1:该声明应该存储在哪里?

当用户稍后再次登录时,我得到了 facebook.com 的声明,我应该从应用程序中获得声明?并合并它们?

工作流程如何。试图理解实际使用中的声明。

基本上,facebook 告诉我我是 john@doe.com 并且“空白字段”添加了一个声明,即我也是 domain.com 的经理

然后我将这些声明传递给 domain.com ?

我应该如何在 asp.net 中配置 domain.com 上的应用程序以信任 facebook 和“填写空白部分”并请求 claim 表两者?

我想我使用外部提供程序进行身份验证和我自己的授权提供程序,这是如何在 ASP.NET (web api/mvc) 上创建的?

更新(澄清)

让我们倒退。我创建了一个用户可以注册的 Web 应用程序。
“不知何故”某处有一个受信任的 ClaimsBased 权限(这应该是另一个应用程序??),我在那里请求特定用户的声明,以查看是否对我的应用程序具有特定权限。

所以我想像:

/authserver/ claim

并且我的验证检查是否满足 X 声明来执行某些操作。

后来我加了facebook。我现在有

/ Facebook / claim

这告诉我用户是 X


/authserver/claims 查看是否可以对资源 Y 执行操作 X。

这是如何在 ASP.NET 上管理的?以及应该在哪里创建/公开/开发我自己的声明?

我想我在这里遗漏了一些基本的东西。

最佳答案

我认为重要的是要了解身份验证和授权之间的区别。

身份验证 - 确认数据或实体的属性真实性的行为。

授权 - 指定资源访问权限的功能,一般与信息安全和计算机安全相关,尤其与访问控制相关。

因此,通常对于安全系统,工作流从身份验证开始。当用户第一次连接/使用系统时,没有经过身份验证(假设该用户属于匿名类型/组)。系统确定用户未通过身份验证的行为本身就是身份验证。基于匿名,那么系统确定匿名用户类型也具有访问权限的行为现在是授权用户可以做什么。对于非常安全的系统,匿名访问的唯一权限是登录屏幕/页面。登录后,用户将被分配一个唯一身份并分配某种类型的组策略/角色(如果尚未创建)。
使用基于 Web 的应用程序并让网站 (#1) 为另一个网站 (#2) 进行身份验证会变得有点复杂。当我登录 StackOverflow(#1) 时,我使用我的 Gmail(#2) 帐户。我通过某种特殊方式重定向到 Google,让 Google 知道我来自/返回的页面。这可能是一个特殊的键/url 组合或用于较少限制的访问,通常与返回 url 有关(在我说,是的,我也返回的地方)。 Google 将创建一个特定于我要返回的 url 的特殊身份验证 token 。它与 URL 相关联,因为这意味着我在 StackOverflow 上的 token 不允许我或其他任何人登录说 NewEgg(换句话说,StackOverflow 上有权访问数据库的人不能使用我的 token 进行身份验证)我在其他网站上,但从技术上讲,他们可以在 StackOverflow 上以我的身份登录,但他们拥有该网站,所以这并不重要)。现在我在 StackOverflow 上通过了身份验证(但从技术上讲,StackOverflow 甚至不需要知道关于我的任何信息,只需要知道我的 token )。

在 StackOverflow 上作为新用户创建一个新帐户。此帐户可能与我在 Stack Overflow 上的唯一帐户和多次登录(以及登录类型、OAuth、OpenID 或 SO 登录)之间存在一对多关系。创建帐户后,我默认拥有他们设置的任何访问权限。如果我需要更多或一些触发器(可以根据我的声誉点说:)我现在可以访问管理功能(给定某个角色)。该角色与我的帐户相关联,并间接与我的身份验证相关联。这意味着我可以创建额外的登录(比如本地 SO 登录)但保留我的帐户。

对于每个身份验证资源(Google、Facebook 等),身份验证方案会有不同,但网站总是至少有一个 token (或多个 token )来说明我是谁(以通用方式) .

所以网站 #1 (Stack Overflow) 已经请求网站 #2 (Google) 对我进行身份验证。但只有网站 #1 知道我的授权。

对于特定于角色的功能,关于处理 ASP.Net 身份和角色管理器的 SO 有很多答案:

Creating Roles in Asp.net Identity MVC 5

mvc 5 check user role

使用 MVC 更深入地了解 Identity - Extending Identity Accounts and Implementing Role-Based Authentication in ASP.NET MVC 5

关于asp.net - 在 Web 应用程序中使用身份验证和授权声明的实际工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564014/

相关文章:

c# - 使用 safari 浏览器发布下载文件

asp.net - SignalR:收到错误:WebSocket 已关闭

javascript - 如何在浏览窗口中仅过滤 .jpg 文件?

javascript - CanvasJS 和多个饼图。

asp.net-mvc-4 - MS 身份和访问工具 MVC 4

Javascript Obfuscator 在本地运行,每次编译

asp.net - INSERT 存储过程不起作用?

asp.net - 从 umbraco 4 迁移到 umbraco 5

asp.net-core - 使用扩展的 MVC Core Identity 用户实现自定义声明

asp.net-core - .Net core 继承 Controller 中的授权属性