我正在尝试让 OAuth2 与 Django 一起使用以允许访问 API,而无需使用 Django 凭据登录。我将 django-tastypie 用于 API,将 django-oauth2-provider 用于 OAuth2 身份验证。使用这篇文章作为指导,这一切都被捆绑在一起。
我已经获得了基本的 OAuth 工作流程(与上面博客文章的“测试提供者”部分完全相同),但显然使用了我自己的模型和用户名/密码。我现在需要让它在 Android 上运行,但我遇到了 client_secret 的障碍。
建议似乎是不要将 client_secret 存储或传输到 android 设备,因为它并不总是安全的。我发现这篇文章表明,对于移动设备,有一个 OAuth 流程允许 OAuth 身份验证,而无需使用 client_secret(在标题为“移动应用程序”的部分下)。我可以使用以“/oauth2/authorize?response_type=code&client_id=XXXXXXXXXXXXXXXX”结尾的 url 获取授权代码,但是当我尝试使用返回代码获取授权令牌时,我仍然需要提供 client_id 和 client_secret。这似乎是因为 django-oauth2-provider 总是需要 client_id 和 client_secret。
那么,我的问题是,如何在无需将 client_secret 存储在 Android 设备上或将 client_secret 作为 POST 数据发送的情况下获得授权令牌?我发现了这个问题,它看起来很相似,并帮助我弄清楚了如何取回grant_code,但我找不到任何关于在没有client_secret 的情况下获取authorization_token 的信息。
如果这不可能,我怎样才能自动将 client_id/client_secret 获取到设备以及保护它的建议是什么?