我正在重新分发OAuth文档,并了解https://auth0.com/docs/flows/authorization-code-flow-with-proof-key-for-code-exchange-pkce比“授权代码流”更好,因为它获得客户机代码并将其交换为access_token的可能性较小。
我还看到在互联网上有一些案例,当客户的机密从诸如Facebook或Twitter的大型移动应用程序中逆转时
所以对我来说,仍然不清楚如何正确实施客户端身份 例如如果我使用资源拥有者授予类型,则我的应用程序中存储了客户ID和客户机密,并且可以对其进行反向工程,并且任何人都可以构建与我的应用程序相同的
如果我使用带有验证密钥的授权代码流进行代码交换,我的应用程序中仍然没有任何秘密。因此,这意味着任何开发人员都可以构建自己的应用程序,该应用程序将成为我的应用程序的镜像。
那么,是否有麻烦为移动应用程序和纯JS(浏览器)客户端正确实现客户端身份?
更新 有2个不错的选择 1-使用重定向网址 2-设置CORS
1个咆哮者,我认为如果尝试使用后端代码模仿行为,那将无济于事。例如。我真的不需要访问该网站即可看到它会在某些时候提供标题重定向,而我只是收到消息并获得此授权码 2对于CORS来说也是一样,以防我的镜像站点从后端获取令牌,服务器将无法识别该客户端不是原始客户端,并且有权使用此客户端
答案 0 :(得分:1)
那么,有没有办法为移动应用程序和纯JS(浏览器)客户端正确实现客户端身份?
每spec,对于授权代码流,必须进行客户端身份验证。建议使用redirection URI
解决方案,以帮助进行客户端身份验证。
以下是IDS4上用于帮助验证客户端身份的选项:
代码示例:
new Client
{
ClientId = "js",
ClientName = "JavaScript Client",
AllowedGrantTypes = GrantTypes.Code,
RequireClientSecret = false,
RedirectUris = { "https://localhost:5003/callback.html" },
PostLogoutRedirectUris = { "https://localhost:5003/index.html" },
AllowedCorsOrigins = { "https://localhost:5003" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}