<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 22 Jul 2017, at 08:54, Haravikk <<a href="mailto:opensim@haravikk.me" class="">opensim@haravikk.me</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">(apologies if this ends up posting multiple times, I mistook the user-activation e-mail as confirmation I could post, instead of following the link first, then on my second attempt used the wrong damn e-mail address *facepalms*)</div><div class=""><br class=""></div><div class=""><br class=""></div>I'm currently looking at porting a set of web-services from Second Life for use with Open Simulator based grids, and my current challenge is validating that an llHTTPRequest() comes from the grid and region that it claims to. For Second Life requests all I had to do was a reverse DNS lookup on the sender's IP address, to see if it ends with <a href="http://agni.lindenlab.com/" class="">agni.lindenlab.com</a> or <a href="http://aditi.lindenlab.com/" class="">aditi.lindenlab.com</a> depending upon the value for X-SecondLife-Shard, as this confirmed the server was valid, which means I can then reasonably trust the other headers.<div class=""><br class=""></div><div class="">For Open Simulator grids this obviously isn't possible. So what I'd like to be able to do is instead require that requests include a header with grid information, such as the grid's login URI (as obtained by the osGetGridLoginUri() function), and then somehow perform a call-back to the grid asking it to confirm if the sender's IP address is currently hosting the region that it claims the request is from.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">To break it down a bit more:</div><div class=""><br class=""></div><div class="">1. A script in Haravikk's Region, hosted at 123.123.123.123 sends an llHTTPRequest() to my web-service with the following key headers:</div><blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div class=""><font face="Monaco" class="">X-SecondLife-Region: Haravikk's Region (1000,1000)</font></div><div class=""><font face="Monaco" class="">X-OpenSim-Region-UUID: 12345678-1234-1234-1234-123456789012</font></div><div class=""><font face="Monaco" class="">X-OpenSim-Grid: <a href="http://mygrid.com/login" class="">http://mygrid.com/login</a>; nick_name=my_grid; name="My Grid"</font></div></blockquote><div class="">2. My web-service doesn't recognise the IP as a host for Haravikk's Region on my_grid, and so sends a call-back to my_grid asking whether the IP 123.123.123.123 is currently hosting a region named "Haravikk's Region".</div><div class="">3. If the grid confirms that it is, my web-service can store a note of this for some reasonable time to avoid repeated requests, and serves up content as normal, knowing that the request comes from the grid and region that it claims to (or at least, that the grid was willing to vouch for it).</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">What I would like to know is:</div><div class="">1. Is something like this currently possible? The only other way I could think to do this would be to write some kind of bot to try to connect to the region through the given grid but that would be incredibly heavy-weight, and I think would only work if the region was accessible via the hyper-grid (since I can't have specific login details for every potential grid).</div><div class="">2. If it isn't currently possible, what would it take to make it so? I'm a programmer myself so wouldn't mind working on adding this if I have to, but I have no familiarity with the code and am only really starting to get a grasp for the structure of Open Simulator, so I'm not sure what the best place to add such an externally facing service might be?</div><div class="">3. Is it worth looking into adding the X-OpenSim-Grid header as a standard feature either way? It's obviously pretty easy to generate yourself via script, but seems like it'd be a useful addition for Open Simulator llHTTPRequest() calls.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">In case it helps, the idea with my web-service is that data will be stored with an awareness of which grid it belongs to; my purpose in validating the region with the grid is to make it harder for a request to be spoofed as coming from a given region/grid combo. While grids like osgrid obviously allow ad-hoc regions to connect and disconnect, I would at least be able to confirm that a region <b class="">did</b> exist, and osgrid was willing to vouch for that region's IP; if a grid doesn't provide confirmation, then I know that the request is being spoofed (or sending old details, or the grid doesn't want to play ball, but either way gives me reason to reject it).</div><div class=""><br class=""></div><div class="">I think this could help a lot for writing web services for use across grids.</div><div class=""><br class=""></div><div class="">Any help is greatly appreciated!</div><div class="">- Haravikk</div></div></div></blockquote><br class=""></div><div>Okay, so I just found that there's no way to retrieve a region's UUID in a script so you can ignore that part; though I had thought it would be a better way to identify a region (in case a region is renamed).</div><div><br class=""></div><div>Though that does raise the separate question; would there be any harm in making a region's UUID available to scripts and/or sending it as a HTTP header? It just seems like it would be a good way to handle any region that is renamed, because as long as the GUID is kept the same then web-services (and grids) could recognise that it's the same region and treat it accordingly.</div><div>While I realise both name and UUID can be changed by anyone at any time, the potential for abuse is limited so long as a region remains connected, i.e- you could only spoof it when the region is down, and only if the grid performs no additional sanity checks.</div><div><br class=""></div><div>Anyway, just wanted to note that at the most basic this proposal would be to query a grid for IP and region-name, UUID can be kept as a separate issue if necessary, though I think it would be the better way to do it.</div></body></html>