HTTP访问控制(CORS)

本文介绍了HTTP访问控制(CORS)的原理和浏览器的同源策略,强调了CORS在跨域请求中的作用。同时,详细讲解了Django中使用django-cors-middleware设置CORS,并探讨了JWT(JSON Web Token)在认证中的应用,提供了Django REST framework JWT的配置示例以及Angular2-JWT的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP访问控制(CORS)

当一个资源从与该资源本身所在的服务器不同的域或端口不同的域或不同的端口请求一个资源时,资源会发起一个跨域 HTTP 请求

出于安全考虑,浏览器会限制从脚本内发起的跨域HTTP请求。例如,出于安全考虑,浏览器会限制从脚本内发起的跨域HTTP请求。例如,XMLHttpRequest 和 Fetch 遵循同源策略。因此,使用 XMLHttpRequest或 Fetch 的Web应用程序只能将HTTP请求发送到其自己的域。为了改进Web应用程序,开发人员要求浏览器厂商允许跨域请求。

概述

跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

django-cors-middleware

Install   pip install django-cors-middleware

change settings

INSTALLED_APPS = (

    ...

    'corsheaders',

    ...

)

MIDDLEWARE = [

    ...

    'corsheaders.middleware.CorsMiddleware',

    'django.middleware.common.CommonMiddleware',

    ...

]

CORS_ORIGIN_ALLOW_ALL = True

https://github.com/zestedesavoir/django-cors-middleware

JWT -- JSON WEB TOKEN

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

http://www.jianshu.com/p/576dbf44b2ae

Django REST framework JWT

Install           pip install djangorestframework-jwt

Change settings

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (

        'rest_framework.permissions.IsAuthenticated',

    ),

    'DEFAULT_AUTHENTICATION_CLASSES': (

        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

        'rest_framework.authentication.SessionAuthentication',

        'rest_framework.authentication.BasicAuthentication',

    ),

}

Add url

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [ '', # ... url(r'^api-token-auth/', obtain_jwt_token), ]

$ curl -X POST -d "username=admin&password=password123" http://localhost:8000/api-token-auth/

$ curl -H "Authorization: JWT <your_token>" http://localhost:8000/protected-url/

http://getblimp.github.io/django-rest-framework-jwt/

angular2-jwt

npm install angular2-jwt

import { NgModule } from '@angular/core';

import { Http, RequestOptions } from '@angular/http';

import { AuthHttp, AuthConfig } from 'angular2-jwt';

export function authHttpServiceFactory(http: Http, options: RequestOptions) {

  return new AuthHttp(new AuthConfig({

    tokenName: 'token',

tokenGetter: (() => localstorage.getItem('token')),

globalHeaders: [{'Content-Type':'application/json'}],

}), http, options);

}

https://github.com/auth0/angular2-jwt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值