首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与南希的IdentityServer3认证

与南希的IdentityServer3认证
EN

Stack Overflow用户
提问于 2015-11-08 20:07:31
回答 1查看 986关注 0票数 2

我如何与南希进行IdentityServer3认证?

有与南希的OpenID身份验证,还有与南希的Active身份验证。有很简单的形式认证与南希。如何与南希进行IdentityServer3认证和授权?

  • 有什么简单快捷的方法吗?
  • 我需要创建IUserMapper吗?
  • 我是否应该使用Nuget for Forms身份验证(对于我的UI视图)?
  • 应该使用Nancy身份验证吗?
  • 如果我对UI视图或RESTFull API调用进行身份验证(并授权),有什么不同吗?(也就是说,我需要在“隐式流”/“代码流”/“混合流”之间进行选择,还是只使用代码流?)
  • IdentityServer3在看什么样的商店会有什么不同吗?
  • 我需要在IDSrv3上设置什么特殊的东西(比如客户机定义)吗?这能/应该在IDSrv3配置文件中完成吗?

我希望将登录屏幕设置为转到IDSrv3,然后返回一个令牌和声明(角色)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-22 02:26:03

好的,我想我理解得很正确:(请在这篇文章的末尾注意编辑)

  1. 如果您只提供(没有交互视图),即如果您没有提供UI,那么您将与OP (OpenID提供程序--在本例中是IdentityServer3服务器)进行交互,只有在您通过来自不同项目的OP登录(使用SSO -单点登录)登录之后,并且只有在该应用程序收到来自OP的访问令牌之后,OpenID才是唯一的。您将使用BearerTokenAuthentication中间件来验证访问令牌。

IdentityServer3需要期待您的调用,因此您需要注册为客户端。

1.1没有资源的--如果您只是授权API(通常是通过角色授权)--您所要做的就是使用授权(Roles=“role1,role2")来修饰。调用API时(使用https!)添加TokenBearer,一切都是自动为您完成的。

1.2 With resources:如果您也是根据用户的同意和声明服务资源(通常也是根据用户的角色),您应该使用IdentityServer简单MVC和API步骤槽文档中推荐的AuthorizationManager。

  1. UI :如果您正在运行需要登录的UI,则必须添加cookies身份验证( Nuget ),然后打开id连接身份验证(请按照MVC示例NugettheIdghtyServer3.OpenIdConnect身份验证)。 这将使您的应用程序与“混合流”一起运行,以便您的第一个调用返回一个id_token和一个access_token。您可以将两个令牌存储在cookie中(通过使用通知)。然后在注销时使用id_token,否则浏览器允许“重播”。

您可以使用access_token调用API(与以前一样),它们反过来返回作用域和声明。

  1. 客户端凭据身份验证第三种选择是用于无人(无用户登录)自动网络呼叫。在这种情况下,使用“客户端凭据”登录到IDServ3中,方法是在IDServ3中设置一个“机密”,并在调用IDServ3以获取带有"claims“的”作用域“列表时使用该秘密和”客户端名称“,您的IDServ3可以使用该列表决定授权或拒绝访问。

编辑:

事实证明,API要使AuthorizeRoles="roles1,roles2“工作,还需要几个步骤。

要使授权在MVC中工作,您必须创建一个自定义的MyAuthorizeAttribute : AuthorizeAttribute类,检查“角色”类型的声明,或者必须更改身份服务器代码以在用户的角色声明中返回ClaimTypes.Role,并在ScopeType=ID中具有包含ClaimTypes.Role角色的作用域。客户端必须允许请求这个新范围。

然后,您必须在MVC启动类中请求该范围,而不是让索赔转换行将声明转换为一组简单字符串的字典集。

现在,要使API授权工作更加困难:

在调用ui中请求"id_token令牌“响应类型将给出一个没有声明中角色的access_token。这是因为只有一个带有ScopeType=Resource的作用域被附加到access_token。所以:

  • 您需要使用带有角色的ScopeType=Resource的另一个范围,
  • idsrv3中的客户端必须允许被请求的范围,
  • 您需要在API项目的启动代码中请求该范围,以及承载令牌启动代码。
  • 最后,由于其资源类型范围,授权将工作,但Roles=.除非您创建自己的MyAuthorizeAttribute : AuthorizeAttribute类,否则不会检查角色。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33598457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档