首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IdentityServer4 -理解流程和端点。它与OAuth和OpenIDConnect有什么关系?

IdentityServer4 -理解流程和端点。它与OAuth和OpenIDConnect有什么关系?
EN

Stack Overflow用户
提问于 2020-02-10 00:21:21
回答 1查看 332关注 0票数 0

我正在集成the应用程序的安全方面。我决定使用OAuth,所以我们在AspNet Core3.0中有一个REST WebApi,它是在React中创建的SPA客户端,以及Identity Server 4.0应用程序(也在AspNet Core 3.0中)。

我读到OAuth是为授权而不是为身份验证而创建的。对于身份验证,似乎还存在着一种叫做OpenIDConnect的东西,所以我脑海中浮现的第一个问题是:是OAuth、OpenIDConnect和IdentityServer相关的技术?。

考虑到我希望在SqlServer数据库中创建用户,如果可能的话,那么哪个是最好的身份验证解决方案?

我的身份验证的流程是:用户编写用户名和密码,如果他们是对的,他将接收JWT令牌,而不将他/她重定向到授权页面。

在这一点上,问题是:哪个端点是执行此流的正确端点:它是/authorize还是/token端点?对于上面的问题,我有很多困惑。

第二件事,检索用户信息的最佳方法是什么?例如,如果我的端点需要从登录的用户了解他的数据,我认为,或者我从端点或JWT令牌中检索。

即使在这里,我也不知道哪一个是最好的。

EN

回答 1

Stack Overflow用户

发布于 2020-02-10 01:27:23

我读到OAuth是为授权而不是为身份验证而创建的。对于身份验证来说,似乎还存在着一种叫做OpenIDConnect的东西,所以我脑海中浮现的第一个问题是: OAuth、OpenIDConnect和IdentityServer是否与技术相关?

没错。OAuth是第一个引入的,允许请求它访问资源的人(它分发访问令牌)。另一方面,OIDC (OpenID Connect)通过身份验证部分扩展了这一概念.

标识令牌验证应用程序的人的身份。而不是通过用户名+密码(即用户在您的网站上创建帐户)提供身份,而是重定向到您的身份验证提供者/应用程序并在那里输入他们的登录,您将得到一个身份令牌作为回报(和/或访问令牌,取决于您请求的流程和作用域)。

标识令牌是JWT令牌(或引用令牌)。JWT令牌包含应用程序所需的所有用户身份信息(用户id、电子邮件、显示名称、年龄等)。而且是加密签名的。只有Identity Server知道用于注册它的密钥,您可以使用OIDC (IdSrv这里)提供程序的公钥来验证它。

引用令牌的工作原理类似,但是在服务器端请求声明并进行缓存。

使用标识令牌,您无法访问用户资源。例如: Facebook。

当您使用facebook帐户在应用程序中签名时,大多数页面只会请求标识令牌来验证它是否是同一个用户(而不是使用用户名/密码组合)。但是这个应用程序不能访问你的facebook帖子,也不能以你的名义发布文章。

如果应用程序请求访问令牌(token作用域),那么也将返回一个访问令牌(如果允许应用程序通过允许的作用域)。您将被要求将权限授予应用程序请求的资源。有了这个标记,应用程序就可以以您的名字读取您的帖子或帖子。

是最好的身份验证解决方案,考虑到我希望在SqlServer数据库中创建用户,如果可能的话,我想使用实体框架作为代理?

其实并不重要。任何一个都可以使用,您真正需要的是"sid“(subject id)声明,并将其与用户联系起来。

Identity Server可以同时发出这两个问题,这取决于客户机所要求的内容(如果客户端请求id_token响应类型,它将接收一个身份令牌,如果它请求token一个访问令牌)。两者都可以指定,或者只指定一个)。

此时的问题是:哪个端点是执行此流的正确端点:是/authorize还是/token端点?对于上面的问题,我有很多困惑。

  • /authorize用于授权用户(让他登录,并发送回您的网站)。它用于所谓的交互式流,其中用户进入credentials
  • /token端点时,您只能检索令牌(资源所有者流(用户名+密码)、客户端凭据(用于机器到机器身份验证)、刷新令牌(通过使用刷新令牌获得新的访问令牌)(如果您请求offline_access作用域(它提供和刷新令牌)

)。

第二件事,检索用户信息的最佳方法是什么?/userinfo端点,请参阅docs:http://docs.identityserver.io/en/latest/endpoints/userinfo.html

正如文档所说的那样,客户端需要请求openid作用域。

例如,如果我的端点需要从登录用户了解他的数据是什么,我认为,或者我从端点或JWT令牌中检索。

是的,如果使用JWT令牌,可以从JWT令牌检索它。如果使用引用令牌,则它只是一个ID。

最后但并非最不重要的一点是,/introspection端点可以用于验证令牌(如果您使用的应用程序没有可以解密和验证令牌签名的库的话)。

如果可以的话,最好使用Identity Server客户端库(即用于npm/javascript应用程序的IdentityServer4.AccessTokenValidation包或oidc客户端),这样您就不必担心它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60142640

复制
相关文章

相似问题

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