|
506 | 506 | let(:top_origin) { fake_top_origin } |
507 | 507 |
|
508 | 508 | before do |
509 | | - WebAuthn.configuration.allowed_top_origins = [top_origin] |
| 509 | + WebAuthn.configuration.allowed_top_origins = allowed_top_origins |
510 | 510 | end |
511 | 511 |
|
512 | | - context "when cross_origin is true" do |
513 | | - let(:cross_origin) { true } |
| 512 | + context "when allowed_top_origins is not set" do |
| 513 | + let(:allowed_top_origins) { nil } |
514 | 514 |
|
515 | | - context "when top_origin is set" do |
516 | | - context "when top_origin matches client top_origin" do |
517 | | - let(:client_top_origin) { top_origin } |
518 | | - |
519 | | - it "verifies" do |
520 | | - expect( |
521 | | - assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
522 | | - ).to be_truthy |
523 | | - end |
524 | | - |
525 | | - it "is valid" do |
526 | | - expect( |
527 | | - assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
528 | | - ).to be_truthy |
529 | | - end |
530 | | - end |
| 515 | + context "when cross_origin is true" do |
| 516 | + let(:cross_origin) { true } |
531 | 517 |
|
532 | | - context "when top_origin does not match client top_origin" do |
533 | | - let(:client_top_origin) { "https://malicious.example.com" } |
| 518 | + context "when top_origin is set" do |
| 519 | + let(:client_top_origin) { top_origin } |
534 | 520 |
|
535 | 521 | it "is invalid" do |
536 | 522 | expect( |
|
548 | 534 | }.to raise_exception(WebAuthn::TopOriginVerificationError) |
549 | 535 | end |
550 | 536 | end |
551 | | - end |
552 | | - |
553 | | - context "when top_origin is not set" do |
554 | | - let(:client_top_origin) { nil } |
555 | | - |
556 | | - it "is invalid" do |
557 | | - expect( |
558 | | - assertion_response.valid?( |
559 | | - original_challenge, |
560 | | - public_key: credential_public_key, |
561 | | - sign_count: 0 |
562 | | - ) |
563 | | - ).to be_falsy |
564 | | - end |
565 | 537 |
|
566 | | - it "doesn't verify" do |
567 | | - expect { |
568 | | - assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
569 | | - }.to raise_exception(WebAuthn::TopOriginVerificationError) |
570 | | - end |
571 | | - end |
572 | | - end |
573 | | - |
574 | | - context "when cross_origin is false" do |
575 | | - let(:cross_origin) { false } |
576 | | - |
577 | | - context "when top_origin is set" do |
578 | | - context "when top_origin matches client top_origin" do |
579 | | - let(:client_top_origin) { top_origin } |
| 538 | + context "when top_origin is not set" do |
| 539 | + let(:client_top_origin) { nil } |
580 | 540 |
|
581 | 541 | it "is invalid" do |
582 | 542 | expect( |
|
594 | 554 | }.to raise_exception(WebAuthn::TopOriginVerificationError) |
595 | 555 | end |
596 | 556 | end |
| 557 | + end |
| 558 | + |
| 559 | + context "when cross_origin is false" do |
| 560 | + let(:cross_origin) { false } |
597 | 561 |
|
598 | | - context "when top_origin does not match client top_origin" do |
599 | | - let(:client_top_origin) { "https://malicious.example.com" } |
| 562 | + context "when top_origin is set" do |
| 563 | + let(:client_top_origin) { top_origin } |
600 | 564 |
|
601 | 565 | it "is invalid" do |
602 | 566 | expect( |
|
631 | 595 | end |
632 | 596 | end |
633 | 597 | end |
634 | | - end |
635 | 598 |
|
636 | | - context "when cross_origin is not set" do |
637 | | - let(:cross_origin) { nil } |
| 599 | + context "when cross_origin is not set" do |
| 600 | + let(:cross_origin) { nil } |
638 | 601 |
|
639 | | - context "when top_origin is set" do |
640 | | - context "when top_origin matches client top_origin" do |
| 602 | + context "when top_origin is set" do |
641 | 603 | let(:client_top_origin) { top_origin } |
642 | 604 |
|
643 | 605 | it "is invalid" do |
|
657 | 619 | end |
658 | 620 | end |
659 | 621 |
|
660 | | - context "when top_origin does not match client top_origin" do |
661 | | - let(:client_top_origin) { "https://malicious.example.com" } |
| 622 | + context "when top_origin is not set" do |
| 623 | + let(:client_top_origin) { nil } |
| 624 | + |
| 625 | + it "verifies" do |
| 626 | + expect( |
| 627 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 628 | + ).to be_truthy |
| 629 | + end |
| 630 | + |
| 631 | + it "is valid" do |
| 632 | + expect( |
| 633 | + assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 634 | + ).to be_truthy |
| 635 | + end |
| 636 | + end |
| 637 | + end |
| 638 | + end |
| 639 | + |
| 640 | + context "when allowed_top_origins is set" do |
| 641 | + let(:allowed_top_origins) { [top_origin] } |
| 642 | + |
| 643 | + context "when cross_origin is true" do |
| 644 | + let(:cross_origin) { true } |
| 645 | + |
| 646 | + context "when top_origin is set" do |
| 647 | + context "when top_origin matches client top_origin" do |
| 648 | + let(:client_top_origin) { top_origin } |
| 649 | + |
| 650 | + it "verifies" do |
| 651 | + expect( |
| 652 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 653 | + ).to be_truthy |
| 654 | + end |
| 655 | + |
| 656 | + it "is valid" do |
| 657 | + expect( |
| 658 | + assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 659 | + ).to be_truthy |
| 660 | + end |
| 661 | + end |
| 662 | + |
| 663 | + context "when top_origin does not match client top_origin" do |
| 664 | + let(:client_top_origin) { "https://malicious.example.com" } |
| 665 | + |
| 666 | + it "is invalid" do |
| 667 | + expect( |
| 668 | + assertion_response.valid?( |
| 669 | + original_challenge, |
| 670 | + public_key: credential_public_key, |
| 671 | + sign_count: 0 |
| 672 | + ) |
| 673 | + ).to be_falsy |
| 674 | + end |
| 675 | + |
| 676 | + it "doesn't verify" do |
| 677 | + expect { |
| 678 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 679 | + }.to raise_exception(WebAuthn::TopOriginVerificationError) |
| 680 | + end |
| 681 | + end |
| 682 | + end |
| 683 | + |
| 684 | + context "when top_origin is not set" do |
| 685 | + let(:client_top_origin) { nil } |
662 | 686 |
|
663 | 687 | it "is invalid" do |
664 | 688 | expect( |
|
676 | 700 | }.to raise_exception(WebAuthn::TopOriginVerificationError) |
677 | 701 | end |
678 | 702 | end |
| 703 | + end |
679 | 704 |
|
680 | | - context "when top_origin is not set" do |
681 | | - let(:client_top_origin) { nil } |
682 | | - |
683 | | - it "verifies" do |
684 | | - expect( |
685 | | - assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
686 | | - ).to be_truthy |
| 705 | + context "when cross_origin is false" do |
| 706 | + let(:cross_origin) { false } |
| 707 | + |
| 708 | + context "when top_origin is set" do |
| 709 | + context "when top_origin matches client top_origin" do |
| 710 | + let(:client_top_origin) { top_origin } |
| 711 | + |
| 712 | + it "is invalid" do |
| 713 | + expect( |
| 714 | + assertion_response.valid?( |
| 715 | + original_challenge, |
| 716 | + public_key: credential_public_key, |
| 717 | + sign_count: 0 |
| 718 | + ) |
| 719 | + ).to be_falsy |
| 720 | + end |
| 721 | + |
| 722 | + it "doesn't verify" do |
| 723 | + expect { |
| 724 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 725 | + }.to raise_exception(WebAuthn::TopOriginVerificationError) |
| 726 | + end |
| 727 | + end |
| 728 | + |
| 729 | + context "when top_origin does not match client top_origin" do |
| 730 | + let(:client_top_origin) { "https://malicious.example.com" } |
| 731 | + |
| 732 | + it "is invalid" do |
| 733 | + expect( |
| 734 | + assertion_response.valid?( |
| 735 | + original_challenge, |
| 736 | + public_key: credential_public_key, |
| 737 | + sign_count: 0 |
| 738 | + ) |
| 739 | + ).to be_falsy |
| 740 | + end |
| 741 | + |
| 742 | + it "doesn't verify" do |
| 743 | + expect { |
| 744 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 745 | + }.to raise_exception(WebAuthn::TopOriginVerificationError) |
| 746 | + end |
| 747 | + end |
| 748 | + |
| 749 | + context "when top_origin is not set" do |
| 750 | + let(:client_top_origin) { nil } |
| 751 | + |
| 752 | + it "verifies" do |
| 753 | + expect( |
| 754 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 755 | + ).to be_truthy |
| 756 | + end |
| 757 | + |
| 758 | + it "is valid" do |
| 759 | + expect( |
| 760 | + assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 761 | + ).to be_truthy |
| 762 | + end |
687 | 763 | end |
| 764 | + end |
| 765 | + end |
688 | 766 |
|
689 | | - it "is valid" do |
690 | | - expect( |
691 | | - assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
692 | | - ).to be_truthy |
| 767 | + context "when cross_origin is not set" do |
| 768 | + let(:cross_origin) { nil } |
| 769 | + |
| 770 | + context "when top_origin is set" do |
| 771 | + context "when top_origin matches client top_origin" do |
| 772 | + let(:client_top_origin) { top_origin } |
| 773 | + |
| 774 | + it "is invalid" do |
| 775 | + expect( |
| 776 | + assertion_response.valid?( |
| 777 | + original_challenge, |
| 778 | + public_key: credential_public_key, |
| 779 | + sign_count: 0 |
| 780 | + ) |
| 781 | + ).to be_falsy |
| 782 | + end |
| 783 | + |
| 784 | + it "doesn't verify" do |
| 785 | + expect { |
| 786 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 787 | + }.to raise_exception(WebAuthn::TopOriginVerificationError) |
| 788 | + end |
| 789 | + end |
| 790 | + |
| 791 | + context "when top_origin does not match client top_origin" do |
| 792 | + let(:client_top_origin) { "https://malicious.example.com" } |
| 793 | + |
| 794 | + it "is invalid" do |
| 795 | + expect( |
| 796 | + assertion_response.valid?( |
| 797 | + original_challenge, |
| 798 | + public_key: credential_public_key, |
| 799 | + sign_count: 0 |
| 800 | + ) |
| 801 | + ).to be_falsy |
| 802 | + end |
| 803 | + |
| 804 | + it "doesn't verify" do |
| 805 | + expect { |
| 806 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 807 | + }.to raise_exception(WebAuthn::TopOriginVerificationError) |
| 808 | + end |
| 809 | + end |
| 810 | + |
| 811 | + context "when top_origin is not set" do |
| 812 | + let(:client_top_origin) { nil } |
| 813 | + |
| 814 | + it "verifies" do |
| 815 | + expect( |
| 816 | + assertion_response.verify(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 817 | + ).to be_truthy |
| 818 | + end |
| 819 | + |
| 820 | + it "is valid" do |
| 821 | + expect( |
| 822 | + assertion_response.valid?(original_challenge, public_key: credential_public_key, sign_count: 0) |
| 823 | + ).to be_truthy |
| 824 | + end |
693 | 825 | end |
694 | 826 | end |
695 | 827 | end |
|
0 commit comments