Public REST api: 添加保护级别
Public REST api: add protection level
我有一个问题。我必须为移动应用程序实施一些 REST API。
我使用 DJANGO Rest 框架。
为此 API 不需要某些身份验证系统:所有 API 都是 public,应用程序可以调用此 API。
我会添加最低级别的保护。
我的目标是不允许任何客户端调用这些 APIs.
我想在服务器和移动应用程序上实现一个将日期 + 其他信息作为参数(例如)的功能。
es: build_toke(date, secret_number) -> Md5 string
当客户端调用我的 API 之一时,它会将此字符串放入 http 请求 header。
服务器将检查此字符串 运行 相同的功能并检查结果。
Md5_server = build_toke(date, secret_number)
Md5_mobile = header_http.get_code()
if Md5_server == Md5_mobile -> OK
else return 401 (not authorized)
这可能是个好主意?
你知道吗?
您可以实现一个CheckMd5Header
custom permission class,它将比较Md5_server
和Md5_mobile
的值并允许访问仅当 2 个值相同时。
要实现自定义权限,您必须覆盖 BasePermission
class 并实现 .has_permission()
方法。如果请求应该被授予访问权限,则此方法应该 return True
,否则 False
。
class CheckMd5Header(permissions.BasePermission):
"""
Permission class to check if the Md5 string in the
request header is same as of the Md5 server string
"""
def has_permission(self, request, view):
md5_mobile = request.META.get('Md5_mobile') # get the value of md5 mobile header
md5_server = build_toke(date, secret_number) # generate md5 server string
return md5_server == md5_mobile # return True or False
然后,您需要在 DRF 设置中添加此权限 class。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
...
'my_app.permissions.CheckMd5Header', # specify custom permission class
)
}
这告诉 DRF 对发生的任何请求使用此权限 class。只有 headers 中的 md5 值与服务器的 md5 值匹配的请求才被允许访问。
我有一个问题。我必须为移动应用程序实施一些 REST API。 我使用 DJANGO Rest 框架。
为此 API 不需要某些身份验证系统:所有 API 都是 public,应用程序可以调用此 API。
我会添加最低级别的保护。 我的目标是不允许任何客户端调用这些 APIs.
我想在服务器和移动应用程序上实现一个将日期 + 其他信息作为参数(例如)的功能。
es: build_toke(date, secret_number) -> Md5 string
当客户端调用我的 API 之一时,它会将此字符串放入 http 请求 header。 服务器将检查此字符串 运行 相同的功能并检查结果。
Md5_server = build_toke(date, secret_number)
Md5_mobile = header_http.get_code()
if Md5_server == Md5_mobile -> OK
else return 401 (not authorized)
这可能是个好主意? 你知道吗?
您可以实现一个CheckMd5Header
custom permission class,它将比较Md5_server
和Md5_mobile
的值并允许访问仅当 2 个值相同时。
要实现自定义权限,您必须覆盖 BasePermission
class 并实现 .has_permission()
方法。如果请求应该被授予访问权限,则此方法应该 return True
,否则 False
。
class CheckMd5Header(permissions.BasePermission):
"""
Permission class to check if the Md5 string in the
request header is same as of the Md5 server string
"""
def has_permission(self, request, view):
md5_mobile = request.META.get('Md5_mobile') # get the value of md5 mobile header
md5_server = build_toke(date, secret_number) # generate md5 server string
return md5_server == md5_mobile # return True or False
然后,您需要在 DRF 设置中添加此权限 class。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
...
'my_app.permissions.CheckMd5Header', # specify custom permission class
)
}
这告诉 DRF 对发生的任何请求使用此权限 class。只有 headers 中的 md5 值与服务器的 md5 值匹配的请求才被允许访问。