Commit c085c15
feat: add scope filtering support for OAuth 2.0 Client Credentials Grant
Add optional 'scope' parameter to all OAuth methods to enable requesting
specific scopes instead of all configured scopes. This solves the issue
where apps with multiple API types (Admin API + Customer Account API +
Storefront API) cannot generate tokens through /admin/oauth/access_token
because that endpoint only supports Admin API scopes.
Changes:
- Add scope parameter to request_token_client_credentials()
- Add scope parameter to request_access_token()
- Add scope parameter to refresh_token_if_needed()
- Add scope parameter to refresh_token()
- Implement scope normalization (convert commas to spaces for OAuth spec)
- Add 7 comprehensive test cases for scope filtering functionality
- Update CHANGELOG with feature documentation
Use case:
When a Shopify app has Customer Account API scopes configured (like
customer_read_metaobjects), requesting a token without scope filtering
fails because Shopify tries to grant ALL scopes through the Admin API
endpoint. With scope filtering, developers can request only Admin API
scopes: session.request_token_client_credentials(scope="read_products write_orders")
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>1 parent 7f6fc68 commit c085c15
3 files changed
Lines changed: 188 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
19 | 25 | | |
20 | 26 | | |
21 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
141 | | - | |
| 141 | + | |
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
156 | 162 | | |
157 | 163 | | |
158 | 164 | | |
| |||
166 | 172 | | |
167 | 173 | | |
168 | 174 | | |
| 175 | + | |
169 | 176 | | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
170 | 181 | | |
171 | 182 | | |
172 | 183 | | |
| |||
196 | 207 | | |
197 | 208 | | |
198 | 209 | | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
199 | 216 | | |
200 | 217 | | |
201 | 218 | | |
| |||
250 | 267 | | |
251 | 268 | | |
252 | 269 | | |
253 | | - | |
| 270 | + | |
254 | 271 | | |
255 | 272 | | |
256 | 273 | | |
| |||
264 | 281 | | |
265 | 282 | | |
266 | 283 | | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
267 | 287 | | |
268 | 288 | | |
269 | 289 | | |
| |||
286 | 306 | | |
287 | 307 | | |
288 | 308 | | |
289 | | - | |
| 309 | + | |
290 | 310 | | |
291 | 311 | | |
292 | 312 | | |
| |||
342 | 362 | | |
343 | 363 | | |
344 | 364 | | |
345 | | - | |
| 365 | + | |
346 | 366 | | |
347 | 367 | | |
348 | 368 | | |
| |||
354 | 374 | | |
355 | 375 | | |
356 | 376 | | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
357 | 381 | | |
358 | 382 | | |
359 | 383 | | |
| |||
381 | 405 | | |
382 | 406 | | |
383 | 407 | | |
384 | | - | |
385 | | - | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
386 | 412 | | |
387 | 413 | | |
388 | 414 | | |
389 | 415 | | |
390 | | - | |
| 416 | + | |
391 | 417 | | |
392 | 418 | | |
393 | 419 | | |
| |||
396 | 422 | | |
397 | 423 | | |
398 | 424 | | |
399 | | - | |
| 425 | + | |
400 | 426 | | |
401 | 427 | | |
402 | 428 | | |
| |||
408 | 434 | | |
409 | 435 | | |
410 | 436 | | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
411 | 443 | | |
412 | 444 | | |
413 | 445 | | |
| |||
431 | 463 | | |
432 | 464 | | |
433 | 465 | | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
434 | 471 | | |
435 | 472 | | |
436 | 473 | | |
| |||
446 | 483 | | |
447 | 484 | | |
448 | 485 | | |
449 | | - | |
| 486 | + | |
450 | 487 | | |
451 | 488 | | |
452 | 489 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
625 | 625 | | |
626 | 626 | | |
627 | 627 | | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
| 692 | + | |
| 693 | + | |
| 694 | + | |
| 695 | + | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
| 704 | + | |
| 705 | + | |
| 706 | + | |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
| 719 | + | |
| 720 | + | |
| 721 | + | |
| 722 | + | |
| 723 | + | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
0 commit comments