首页 文章

Django Oauth工具包应用程序设置

提问于
浏览
8

Django Oauth Toolkit文档在注册您的应用程序时不会描述重定向uris,授权授权类型或客户端类型字段 .

该教程说将客户端类型设置为机密,将类型授予密码,并将uris留空 .

其他选项有什么作用?

例如什么是客户类型公共与机密?授权类型密码,凭据,授权,隐式做什么?什么是重定向uris?

我发现了关于它们的稀疏信息,但没有关于django rest framework和django oauth工具包的实际解释 .

1 回答

  • 13

    一旦你阅读了来自here的Oauth2协议,你就会得到所有问题的答案 .

    但我会简要回答你的问题:

    我会经常使用 clientResource Server 这两个词 . 在 Oauth2 协议中, client 表示访问资源,数据或服务的系统 . (它可能是您的移动应用程序或javascript应用程序消耗您的API后端(或 Resource Server )的REST API . 如果您已经在您的移动/ JS应用程序中实现了Facebook登录,很可能,您的API后端请求Facebook获取用户的信息 . 在这种情况下您的API后端是 client ,Facebook是 Resource Server

    Client Types:

    客户端类型是 confidentialpublic ,具体取决于客户端是否可以保密 client_secret . (例如,一个 AngularJS 应用程序无法保持 client_secret 隐藏,因为任何人都可以在浏览器中执行"Inspect Element"并搜索它,因此这样的 client 必须注册为 public . )

    Authorization Grant Types:

    Oauth2 协议中有四种 Authorization Grant Types .

    • Authorization Code:

    在此授权类型中, client 首先请求 authorization code ,然后将 authorization codeaccess token 进行交换 . 这是一个两步程序 . 如果 client 是局外人(在 Resource-owner password based 中有更多内容),请使用此选项 .

    • Implicit:

    通常与 public client_type 一起使用 . 而不是上面的两步程序, client 一次获得 access token .

    • Resource-owner password based:

    clientResource Server 之间存在高度信任时使用 . 您的API后端和移动应用之间就是这种情况 . (您的API后端和 Javascript 应用程序之间也存在高度信任,但由于它无法保密 client_secret ,您必须使用 Implicit Grant类型) . FacebookGoogle 等永远不会给你这种 Authorization Grant 因为,对他们来说,你的API后端是一个局外人 .

    • Client Credentials:

    它最不常用 . 请在上述文件中阅读 .

    Redirect URI's:

    现在,就 Redirect URI's 而言,它们仅在 Authorization CodeImplicit 授权类型中需要(不确定 Client Credentials 一个,有人请在评论中启发我) . 给出重定向URI,以便 Resource Server 知道发送 access token 的位置 . 想象一下,如果你正在实施Facebook登录 . 在这种情况下,您将转到 developers.facebook.com 并注册您的应用程序(就像您使用 django-oauth-toolkit 一样),在注册您的应用程序时,您将指定 Redirect URI .

    指定 Redirect URI 是一种说法 . "Hey Facebook, send the access token on this URI" . 因此,如果将 Redirect URI 设置为https://your_domain_name.com/token/facebook/Facebook 将在Oauth2进程结束时重定向到指定的 Redirect URI ,并以 GET 参数的形式提供 Access Token ,如https://your_domain_name.com/token/facebook/?token=some_long_string&some=other_parameters .

相关问题