openidconnect.server、第三方提供商和重定向
openidconnect.server, third party providers & redirection
我目前正在构建我的 openid 连接服务器,使用 https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server 和 asp.net 核心身份作为后备存储。我知道协议、流程和安全漏洞。
当前设置如下:
[server]
- 授权服务器和资源服务器
[front-end]
- angularJS 应用程序
[third-party-provider]
- Google
[external-app]
- 第二个应用程序想要使用来自 [server]
的令牌
[front-end]
和 [external-app]
都注册为 [server]
的客户。因此,他们可以取回令牌。登录页面建立在 [front-end]
.
请记住,登录页面等由 [front-end]
应用程序显示(而不是从 AccountController 返回 AuthView)
假设我想使用 [external-app]
登录以从 [server]
获取身份。登录页面显示为[front-end]
。然后流程如下:
1. [external-app] -> http://[server]/account/authorize?client_id=[external-
app-clientid]&response_type=token&redirect_uri=http://[external-app-
redirecturi]
2. [front-end] -> matches route -> show login page
3. [front-end] -> user clicks on login with google
4. [front-end] -> redirect to 'http://[server]/account/authorize/connect?
provider=Google&redirect_uri=http://[front-
end]/account/thirdparty/authorized&response_type=code&client_id=[front-
end-clientid]
5. [server] -> no identity found, save request in session and let the user
login at the [third-party] (using ChallengeResult and also passing in the
request id which was stored in session)
6. [third-party-provider] user logs in
7. [front-end] -> http://[front-end]/account/thirdparty/authorized recieved
the code
8. [front-end] -> exchange authcode for token with [server] using
http://[server]/account/token&grant_type=authorization_code&code=
[code]&redirect_uri=http://[front-
end]/account/thirdparty/authorized&client=[front-end-clientid]
9. [server] -> generate claims and return token
10. [front-end] -> token recieved
我缺少的一件事(可能是实现缺陷、思想缺陷或其他)是我需要使用给定的令牌重定向回 [external-app
]。我需要在 [front-end]
上这样做吗?感觉不对,我敢肯定我混合/匹配的东西是错误的。谁能帮帮我?
提前致谢!
PS 是的,我知道,应该是 https。以上仅供参考 ;)
对于像隐式流这样的交互式流,要记住的重要一点是您必须将用户重定向到身份提供者的授权端点,以便它有机会准备授权响应。
您可以自由决定从您的身份提供者收到授权请求到它 returns 授权响应之间发生的情况,但您不能将用户从您的 "front-end" 直接向 "external application" 申请,因为它无法生成授权响应(这不是它的作用)。
考虑修改您的流程,以便您的前端应用程序将您的用户重定向到授权服务器,授权服务器本身会将他们重定向到您的外部应用程序。
我目前正在构建我的 openid 连接服务器,使用 https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server 和 asp.net 核心身份作为后备存储。我知道协议、流程和安全漏洞。
当前设置如下:
[server]
- 授权服务器和资源服务器
[front-end]
- angularJS 应用程序
[third-party-provider]
- Google
[external-app]
- 第二个应用程序想要使用来自 [server]
[front-end]
和 [external-app]
都注册为 [server]
的客户。因此,他们可以取回令牌。登录页面建立在 [front-end]
.
请记住,登录页面等由 [front-end]
应用程序显示(而不是从 AccountController 返回 AuthView)
假设我想使用 [external-app]
登录以从 [server]
获取身份。登录页面显示为[front-end]
。然后流程如下:
1. [external-app] -> http://[server]/account/authorize?client_id=[external-
app-clientid]&response_type=token&redirect_uri=http://[external-app-
redirecturi]
2. [front-end] -> matches route -> show login page
3. [front-end] -> user clicks on login with google
4. [front-end] -> redirect to 'http://[server]/account/authorize/connect?
provider=Google&redirect_uri=http://[front-
end]/account/thirdparty/authorized&response_type=code&client_id=[front-
end-clientid]
5. [server] -> no identity found, save request in session and let the user
login at the [third-party] (using ChallengeResult and also passing in the
request id which was stored in session)
6. [third-party-provider] user logs in
7. [front-end] -> http://[front-end]/account/thirdparty/authorized recieved
the code
8. [front-end] -> exchange authcode for token with [server] using
http://[server]/account/token&grant_type=authorization_code&code=
[code]&redirect_uri=http://[front-
end]/account/thirdparty/authorized&client=[front-end-clientid]
9. [server] -> generate claims and return token
10. [front-end] -> token recieved
我缺少的一件事(可能是实现缺陷、思想缺陷或其他)是我需要使用给定的令牌重定向回 [external-app
]。我需要在 [front-end]
上这样做吗?感觉不对,我敢肯定我混合/匹配的东西是错误的。谁能帮帮我?
提前致谢!
PS 是的,我知道,应该是 https。以上仅供参考 ;)
对于像隐式流这样的交互式流,要记住的重要一点是您必须将用户重定向到身份提供者的授权端点,以便它有机会准备授权响应。
您可以自由决定从您的身份提供者收到授权请求到它 returns 授权响应之间发生的情况,但您不能将用户从您的 "front-end" 直接向 "external application" 申请,因为它无法生成授权响应(这不是它的作用)。
考虑修改您的流程,以便您的前端应用程序将您的用户重定向到授权服务器,授权服务器本身会将他们重定向到您的外部应用程序。