Implementing AJAX-based client-side apps without JSON
Has anyone had any success with this using the Convio API? Because the host name cannot be your own custom host name (if you have one), has anyone had any success in this area?
Some ideas that, if run as a pure client-side application, perhaps from within the Convio CMS for example, where this is no server-side proxy capability (to my knowledge), or as packaged widgets you want your constituents to post on their personal websites without any server-side application support:
1. A custom donation form that self populates with user's data if, after the user enters their email address (or other information), they exist but are not already authenticated. (really, this would be a script attached to your standard donation form, not something extra special that isn't in Convio now)
2. Same above with Advocacy actions...
3. Any sort of integration with external applications, either on your website or another vendors, where you want the user to stay on Convio. An example might be a comments/blog field on your donation or advocacy form that, when the donation is submitted, actually posts the comment to a blog or blog comment section, or message board thread or whatever, but some peice of data required for the remote site is in Constituent360, but not entered into the donation form (Convio user name, maybe).
4. A flash application sitting on a Convio-hosted page that pulls some set of data dynamically out of Convio -- say a tell-a-friend chain (you told 3 friends, they told 7, they told 30... etc).
If you write your component such that it can accept JSON responses... you're ok, since thankfully JavaScripts can be called cross-domain. But if, say, you're using a store-bought component and you don't know how and/or can't afford to pay someone to modify it and it only does traditional AJAX (that is -- takes XML response data only). The Convio API will not be useful.
I'm just curious if anyone has happened to run into this yet, and if so, how they got around it. My goal is to create completely client-side applications that don't rely on any particular server platform to operate...
-mike
Comments
-
I believe that you're referring to JSONP (JSON with padding) which is a convention where the server will return the response as wrapped inside of a javascript method invocation. The client HTML then injects a <script> tag into the document to invoke the remote method. We evaluated supporting JSONP when we first came out with the Open APIs and decided that we shouldn't support it. Some of the issues that you run into are:
-
You have to support access via an HTTP GET method, which isn't semantically correct for many of our methods. You should not be applying an update using a GET method.
-
You get very exposed if you rely solely on cookie-based authentication. For example, once a user has logged in at your site, a malicious site could make a request to retrieve information and because the user's browser already had a session cookie it would be allowed.
There are cases where JSONP makes perfect sense though. If you look at the Google APIs, they are typically just retrieving non-personalized data so neither of the issues I raise is relevant.
Right now, the Open APIs are well-suited for designing a custom UI on top of the underlying functionality that is hosted on a Convio site and less well-suited for uses on other sites. The two things that we are doing to address that are creating more APIs that fall into the same general family as the Google ones (reading non-personalized data) and working on the javascript API that addresses the crossdomain access issue in a more secure fashion.
0 -
-
DavidHart :
I believe that you're referring to JSONP (JSON with padding) which is a convention where the server will return the response as wrapped inside of a javascript method invocation. The client HTML then injects a <script> tag into the document to invoke the remote method. We evaluated supporting JSONP when we first came out with the Open APIs and decided that we shouldn't support it. Some of the issues that you run into are:
-
You have to support access via an HTTP GET method, which isn't semantically correct for many of our methods. You should not be applying an update using a GET method.
-
You get very exposed if you rely solely on cookie-based authentication. For example, once a user has logged in at your site, a malicious site could make a request to retrieve information and because the user's browser already had a session cookie it would be allowed.
There are cases where JSONP makes perfect sense though. If you look at the Google APIs, they are typically just retrieving non-personalized data so neither of the issues I raise is relevant.
Right now, the Open APIs are well-suited for designing a custom UI on top of the underlying functionality that is hosted on a Convio site and less well-suited for uses on other sites. The two things that we are doing to address that are creating more APIs that fall into the same general family as the Google ones (reading non-personalized data) and working on the javascript API that addresses the crossdomain access issue in a more secure fashion.
So, what prevents people from simply writting their own server-side proxy application and making it available for client-side use? Sure, it would hide the admin credentials, but the "server-side-only" apis would suddenly be made available as client-side tools. You would even be able to create mappings in the proxy for JSONP...
0 -
-
Michael :
So, what prevents people from simply writting their own server-side proxy application and making it available for client-side use? Sure, it would hide the admin credentials, but the "server-side-only" apis would suddenly be made available as client-side tools. You would even be able to create mappings in the proxy for JSONP...
If by "people" you refer to the staff of Convio clients building customizations, then the answer is that there are no technical barriers to doing this, but there may limitations to what the proxy can do. The limitation is that for methods accessing sensitive information (getting or updating a user's profile, for example), you must authenticate the user. They may have logged in to the Convio system, but the browser is not going to send that session cookie to your site and that is the only thing that confirms who the user is. You can't simply trust an email address or user name that gets sent from the browser, either.
If by "people" you refer to malicious hackers, they cannot do this (create an attack proxy server behind their attack web page) because the server's IP address must be registered in the configuration settings of the Convio powered site.
If you are considering providing a JSONP front-end to a server, I caution you to first fully understand the security vulnerabilities that can be created when combining JSONP with cookie-based authentication to access sensitive information. Of particular interest is cross-site request forgery (CSRF). A search of "JSONP CSRF cookie" should provide some relevant reading.
0
Categories
- All Categories
- Shannon parent
- shannon 2
- shannon 1
- 21 Advocacy DC Users Group
- 14 BBCRM PAG Discussions
- 89 High Education Program Advisory Group (HE PAG)
- 28 Luminate CRM DC Users Group
- 8 DC Luminate CRM Users Group
- Luminate PAG
- 5.9K Blackbaud Altru®
- 58 Blackbaud Award Management™ and Blackbaud Stewardship Management™
- 409 bbcon®
- 2.1K Blackbaud CRM™ and Blackbaud Internet Solutions™
- donorCentrics®
- 1.1K Blackbaud eTapestry®
- 2.8K Blackbaud Financial Edge NXT®
- 1.1K Blackbaud Grantmaking™
- 527 Education Management Solutions for Higher Education
- 1 JustGiving® from Blackbaud®
- 4.6K Education Management Solutions for K-12 Schools
- Blackbaud Luminate Online & Blackbaud TeamRaiser
- 16.4K Blackbaud Raiser's Edge NXT®
- 4.1K SKY Developer
- 547 ResearchPoint™
- 151 Blackbaud Tuition Management™
- 1 YourCause® from Blackbaud®
- 61 everydayhero
- 3 Campaign Ideas
- 58 General Discussion
- 115 Blackbaud ID
- 87 K-12 Blackbaud ID
- 6 Admin Console
- 949 Organizational Best Practices
- 353 The Tap (Just for Fun)
- 235 Blackbaud Community Feedback Forum
- 55 Admissions Event Management EAP
- 18 MobilePay Terminal + BBID Canada EAP
- 36 EAP for New Email Campaigns Experience in Blackbaud Luminate Online®
- 109 EAP for 360 Student Profile in Blackbaud Student Information System
- 41 EAP for Assessment Builder in Blackbaud Learning Management System™
- 9 Technical Preview for SKY API for Blackbaud CRM™ and Blackbaud Altru®
- 55 Community Advisory Group
- 46 Blackbaud Community Ideas
- 26 Blackbaud Community Challenges
- 7 Security Testing Forum
- 1.1K ARCHIVED FORUMS | Inactive and/or Completed EAPs
- 3 Blackbaud Staff Discussions
- 7.7K ARCHIVED FORUM CATEGORY [ID 304]
- 1 Blackbaud Partners Discussions
- 1 Blackbaud Giving Search™
- 35 EAP Student Assignment Details and Assignment Center
- 39 EAP Core - Roles and Tasks
- 59 Blackbaud Community All-Stars Discussions
- 20 Blackbaud Raiser's Edge NXT® Online Giving EAP
- Diocesan Blackbaud Raiser’s Edge NXT® User’s Group
- 2 Blackbaud Consultant’s Community
- 43 End of Term Grade Entry EAP
- 92 EAP for Query in Blackbaud Raiser's Edge NXT®
- 38 Standard Reports for Blackbaud Raiser's Edge NXT® EAP
- 12 Payments Assistant for Blackbaud Financial Edge NXT® EAP
- 6 Ask an All Star (Austen Brown)
- 8 Ask an All-Star Alex Wong (Blackbaud Raiser's Edge NXT®)
- 1 Ask an All-Star Alex Wong (Blackbaud Financial Edge NXT®)
- 6 Ask an All-Star (Christine Robertson)
- 21 Ask an Expert (Anthony Gallo)
- Blackbaud Francophone Group
- 22 Ask an Expert (David Springer)
- 4 Raiser's Edge NXT PowerUp Challenge #1 (Query)
- 6 Ask an All-Star Sunshine Reinken Watson and Carlene Johnson
- 4 Raiser's Edge NXT PowerUp Challenge: Events
- 14 Ask an All-Star (Elizabeth Johnson)
- 7 Ask an Expert (Stephen Churchill)
- 2025 ARCHIVED FORUM POSTS
- 322 ARCHIVED | Financial Edge® Tips and Tricks
- 164 ARCHIVED | Raiser's Edge® Blog
- 300 ARCHIVED | Raiser's Edge® Blog
- 441 ARCHIVED | Blackbaud Altru® Tips and Tricks
- 66 ARCHIVED | Blackbaud NetCommunity™ Blog
- 211 ARCHIVED | Blackbaud Target Analytics® Tips and Tricks
- 47 Blackbaud CRM Higher Ed Product Advisory Group (HE PAG)
- Luminate CRM DC Users Group
- 225 ARCHIVED | Blackbaud eTapestry® Tips and Tricks
- 1 Blackbaud eTapestry® Know How Blog
- 19 Blackbaud CRM Product Advisory Group (BBCRM PAG)
- 1 Blackbaud K-12 Education Solutions™ Blog
- 280 ARCHIVED | Mixed Community Announcements
- 3 ARCHIVED | Blackbaud Corporations™ & Blackbaud Foundations™ Hosting Status
- 1 npEngage
- 24 ARCHIVED | K-12 Announcements
- 15 ARCHIVED | FIMS Host*Net Hosting Status
- 23 ARCHIVED | Blackbaud Outcomes & Online Applications (IGAM) Hosting Status
- 22 ARCHIVED | Blackbaud DonorCentral Hosting Status
- 14 ARCHIVED | Blackbaud Grantmaking™ UK Hosting Status
- 117 ARCHIVED | Blackbaud CRM™ and Blackbaud Internet Solutions™ Announcements
- 50 Blackbaud NetCommunity™ Blog
- 169 ARCHIVED | Blackbaud Grantmaking™ Tips and Tricks
- Advocacy DC Users Group
- 718 Community News
- Blackbaud Altru® Hosting Status
- 104 ARCHIVED | Member Spotlight
- 145 ARCHIVED | Hosting Blog
- 149 JustGiving® from Blackbaud® Blog
- 97 ARCHIVED | bbcon® Blogs
- 19 ARCHIVED | Blackbaud Luminate CRM™ Announcements
- 161 Luminate Advocacy News
- 187 Organizational Best Practices Blog
- 67 everydayhero Blog
- 52 Blackbaud SKY® Reporting Announcements
- 17 ARCHIVED | Blackbaud SKY® Reporting for K-12 Announcements
- 3 Luminate Online Product Advisory Group (LO PAG)
- 81 ARCHIVED | JustGiving® from Blackbaud® Tips and Tricks
- 1 ARCHIVED | K-12 Conference Blog
- Blackbaud Church Management™ Announcements
- ARCHIVED | Blackbaud Award Management™ and Blackbaud Stewardship Management™ Announcements
- 1 Blackbaud Peer-to-Peer Fundraising™, Powered by JustGiving® Blogs
- 39 Tips, Tricks, and Timesavers!
- 56 Blackbaud Church Management™ Resources
- 154 Blackbaud Church Management™ Announcements
- 1 ARCHIVED | Blackbaud Church Management™ Tips and Tricks
- 11 ARCHIVED | Blackbaud Higher Education Solutions™ Announcements
- 7 ARCHIVED | Blackbaud Guided Fundraising™ Blog
- 2 Blackbaud Fundraiser Performance Management™ Blog
- 9 Foundations Events and Content
- 14 ARCHIVED | Blog Posts
- 2 ARCHIVED | Blackbaud FIMS™ Announcement and Tips
- 59 Blackbaud Partner Announcements
- 10 ARCHIVED | Blackbaud Impact Edge™ EAP Blogs
- 1 Community Help Blogs
- Diocesan Blackbaud Raiser’s Edge NXT® Users' Group
- Blackbaud Consultant’s Community
- Blackbaud Francophone Group
- 1 BLOG ARCHIVE CATEGORY
- Blackbaud Community™ Discussions
- 8.3K Blackbaud Luminate Online® & Blackbaud TeamRaiser® Discussions
- 5.7K Jobs Board