Cross-Origin Resource Sharing(CORS)
OAuth2とOIDCの文脈でCORSポリシーを理解し、特にシングルページアプリケーションから保護されたリソースへアクセスする場合の仕組みを学びます。
「Cross-Origin Resource Sharing(CORS)」はCoddyKit上の無料OAuth2 & OpenID Connect Deep Diveレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはOAuth2 & OpenID Connect Deep Dive学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 OAuth2 & OpenID Connect Deep Diveコースには全4レッスンが含まれています。
このレッスンの一部はまだ翻訳されておらず、英語で表示されています。
CORS & Secure Web Apps
Welcome! Today we'll explore Cross-Origin Resource Sharing (CORS), a crucial security feature for modern web applications.
CORS allows web browsers to securely handle requests between a client-side application (like a Single-Page Application, SPA) and an API server when they're on different domains.
This is especially vital when your SPA uses OAuth2 or OpenID Connect to access protected resources.
The Same-Origin Policy
To understand CORS, we first need to know about the Same-Origin Policy (SOP).
- SOP is a fundamental browser security feature.
- It prevents web pages from making requests to a different domain than the one that served the page.
- For example, a script from
app.example.comcannot directly make an AJAX request toapi.anothersite.com.
This protects users from malicious scripts trying to steal data from other sites you're logged into.
Why CORS is Needed
While SOP is great for security, it creates a problem for modern web architectures.
Many applications, especially SPAs, need to fetch data from APIs hosted on a different domain or port. For instance:
- Your SPA is at
https://my-app.com - Your API is at
https://api.my-app.com - Your OAuth2 Authorization Server is at
https://auth.my-app.com
CORS provides a controlled way to relax the SOP, allowing these cross-origin requests while maintaining security.
Simple CORS Requests
Some cross-origin requests are considered 'simple' by browsers. These don't trigger a special preflight check.
A request is simple if it meets all these conditions:
- Method is
GET,HEAD, orPOST. - Only specific allowed headers (e.g.,
Accept,Accept-Language,Content-Language,Content-Type). Content-Typeheader is limited toapplication/x-www-form-urlencoded,multipart/form-data, ortext/plain.
If simple, the browser sends the request directly, and the server includes CORS headers in its response.
Preflight for Complex Requests
Most requests in modern SPAs, especially those involving OAuth2 tokens, are not simple.
A 'complex' request requires a browser to send a 'preflight' OPTIONS request before the actual request:
- Methods:
PUT,DELETE, or custom methods. - Headers: Custom headers (like
Authorizationfor access tokens). - Content-Type:
application/json(common for APIs).
The server must respond to this OPTIONS request with appropriate CORS headers, indicating if the actual request is allowed.
Key CORS Response Headers
The server communicates its CORS policy through specific HTTP response headers:
Access-Control-Allow-Origin:Specifies which origins are allowed to access the resource. Can be*(wildcard, generally discouraged for security) or a specific origin likehttps://my-app.com.Access-Control-Allow-Methods:Lists the HTTP methods (e.g.,GET, POST, PUT, DELETE) allowed for the resource.Access-Control-Allow-Headers:Indicates which HTTP headers (e.g.,Authorization, Content-Type) are allowed in the actual request.
These headers are crucial for the browser to permit the cross-origin request.
CORS & Credentials
The Access-Control-Allow-Credentials header is another important CORS header.
When set to true, it tells the browser that the server permits cookies, HTTP authentication, or client-side SSL certificates to be included with the cross-origin request.
For OAuth2/OIDC, access tokens are typically sent in the Authorization header, not as cookies. However, if you're using session cookies for authentication or identity management alongside tokens, this header becomes relevant.
CORS in OAuth2/OIDC Flows
CORS is essential at several points in OAuth2/OIDC:
- Token Exchange: Your SPA might need to exchange an authorization code for an access token at the Authorization Server's token endpoint. This is a cross-origin
POSTrequest. - API Access: Once your SPA has an access token, it uses it to call a Resource Server's API (e.g.,
GET /userinfo,POST /orders). This is also a cross-origin request.
The Authorization Server and Resource Server must be configured correctly to allow these requests from your SPA's origin.
Best Practices for CORS
To ensure secure OAuth2/OIDC implementations with CORS:
- Specific Origins: Always specify exact origins (e.g.,
https://my-app.com) inAccess-Control-Allow-Origin, never use*in production. - Limit Methods & Headers: Only allow the HTTP methods and headers that your client applications genuinely need.
- Configure Servers: Ensure your Authorization Server and Resource Server are correctly configured to send the necessary CORS headers.
- Handle Preflights: Make sure your server can respond to
OPTIONSrequests for preflight checks.
Misconfigured CORS can lead to security vulnerabilities, allowing unauthorized access.
CORS Configuration Check
Your SPA at https://my-app.com needs to make a POST request with an Authorization header and Content-Type: application/json to your API at https://api.my-app.com/data. Which CORS response headers should the API server include to allow this?
Recap: CORS & Security
You've learned about Cross-Origin Resource Sharing (CORS) and its vital role in securing modern web applications, especially those leveraging OAuth2 and OpenID Connect.
- CORS relaxes the browser's Same-Origin Policy.
- It enables secure communication between different origins.
- Preflight requests for 'complex' API calls are common with OAuth2 tokens.
- Proper server-side configuration of CORS headers (
Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Headers) is key.
Always follow best practices to prevent misconfigurations that could expose your protected resources.
AI チューターと学ぶ OAuth2 & OpenID Connect Deep Dive — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 12
- レッスン
- 48
よくある質問
「Cross-Origin Resource Sharing(CORS)」レッスンは無料ですか?
はい。「Cross-Origin Resource Sharing(CORS)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、OAuth2 & OpenID Connect Deep Diveコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 OAuth2 & OpenID Connect Deep Diveコースには全4レッスンが含まれています。
「Cross-Origin Resource Sharing(CORS)」で何を学びますか?
OAuth2とOIDCの文脈でCORSポリシーを理解し、特にシングルページアプリケーションから保護されたリソースへアクセスする場合の仕組みを学びます。 ブラウザで直接実行するハンズオンコードでOAuth2 & OpenID Connect Deep Diveを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
OAuth2 & OpenID Connect Deep Diveを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのOAuth2 & OpenID Connect Deep Diveは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Cross-Origin Resource Sharing(CORS)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このOAuth2 & OpenID Connect Deep Diveレッスンでコードを書いて実行できますか?
はい。すべてのOAuth2 & OpenID Connect Deep Diveレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 同意とユーザーエクスペリエンス
- Cross-Origin Resource Sharing(CORS)
- フロントチャネルとバックチャネルのログアウト
- mTLSによる送信者制約付きトークン