我正在尝试学习如何利用auth0来处理我正在创建的api的用户身份验证。
我的api有两个端点:
登录终结点:/api/login
请求访问令牌端点:/api/auth?code={code}
此处的身份验证流程为:
/api/auth
,其中使用登录代码发出access_token请求。 首先,我理解Oauth身份验证流程是否正确?如果是这样,我的api应该如何最好地处理初始登录重定向到auth0?
因为当我从前端ui点击/api/login
时,它只返回auth0的登录页面的html。我应该使用重定向网址返回302,还是可以创建一个用户输入用户名&通过我的api密码,避免重定向?
--- ---更新
用户通过auth0进行身份验证后,他们会收到一个access_token和id_token,我的api应该用来验证用户是否是他们所说的人?
不确定我的理解是否正确,但我相信我的前端ui是OAuth客户端应用程序,而我的API服务是OAuth资源服务器。因此,我的api需要调用auth0 / userinfo来验证用户吗?
答案 0 :(得分:1)
假设您正在尝试保护最终用户应用程序(您的问题并未明确),我的理解是,如果您使用的是Auth0,您可能不会需要/api/login
和api/auth
API。如果您使用的是Auth0,则可以通过Auth0在身份验证期间获取这些内容。
我会说你的APPLICATION(不是API)会将用户重定向到Auth0登录端点。您可以通过合并Auth0 SDK of choice来实现,具体取决于您正在构建的内容。例如,如果您要构建网络应用,则可以选择合并auth0.js
并致电webAuth.authorize()
来触发登录。在登录期间,如果您在Auth0中配置了API,并且在登录期间提供了适当的范围和受众,则您的响应将返回API令牌。
然后,您的用户处于您登录的客户端状态,并且您有一个令牌。然后,您可以将该令牌提供给您的API,您的API可以根据需要验证该令牌。 Auth0还有各种用于令牌验证的库(例如,像spring security one)。
最后,关于oAuth流程使用的问题,也取决于您保护的应用程序类型。再次Auth0 docs可以提供帮助。流程取决于您是否正在构建服务器端Web应用程序,SPA,本机应用程序等。您的问题有点令人困惑,这听起来有点像您正在构建API并希望保护。如果没有客户端应用程序(只有机器到机器的API调用),那么您就不会处理HTML和登录页面。您可能正在进入Client Credentials流程,我最后检查的流程仅包含在Enterprise Auth0用户中。