The Shibboleth V1 software has reached its End of Life and is no longer supported. This documentation is available for historical purposes only.
SPWontProtect
The most common early problem with the SP most people have is getting it to "run". There are a lot of different reasons the filter/module might not appear to be doing anything, depending on the platform.
Usually, you can isolate this up front based on whether shibd
is runnable or not. This can be done from the command line by running the shibd
command (it's in sbin
) using the -check
(Windows) or -t
(Unix) option. If you get reasonable output, then there's a pretty good chance the filter/module is "working", it's just not configured to do what you want yet. If not, then you need to fix the shibd
problem first, usually by correcting configuration file errors.
Otherwise, move on by platform...
IIS
Check Permissions
With IIS, the first thing to do is to check the Windows Event Log. If you access a site with the filter installed, you should get event log messages saying that the filter initialized. If so, the filter is running, and there's a decent chance permissions are ok. If not, I'd start by making sure that the anonymous IIS user (IUSR_<machine>) has read access the \opt\shibboleth-sp
tree. There may be other accounts that need access also, if you have ASP.NET AppPool identities configured.
You should also make sure those accounts can write to the \opt\shibboleth-sp\var\log\shibboleth
folder. Otherwise you won't get a native.log
file created. If that file's there, you should see additional information about the health of the filter.
Green Arrow
All those steps should lead to the wondrous "green arrow". Once you access a web page on a site with the filter installed, you should get the arrow in the IIS GUI on the Filters tab. If there's no arrow, or it's red, or Unknown status, something's not right. But that only matters if you've accessed the site. Until you do, restarting will leave the filter in an Unknown state on IIS 6.
Unfortunately, if the problem isn't permissions, and shibd
is running as a service, I can't tell you what to try. You could try restarting the machine or IIS, but ultimately, you'll have to play with it and hope. One thing I find is that you often need to install the filter directly on the web site. Sometimes installing it up above doesn't work well.
One other thing you can do that helps sanity check things is access the special extension URL that the code responds to via the Script Mapping. Try accessing /Shibboleth.sso/Foo
on your web site. That should spit back a Shibboleth error page. If not, or you get a "Filter not initialized" error or something ugly, then that's a sign the filter isn't running safely yet.
Once you get that nicer error page or the green arrow, the rest is pretty much going to be Shibboleth configuration work.
Site and Request Mapping
The first thing to check is for the proper <Site>
elements defined in ShibbolethXml in the <ISAPI>
element. You MUST create them for each web site you're using the filter with by mapping from the IIS Site Instance ID to the right hostname(s). You can find the ID on the GUI in the list of Web Sites. It's often a large number on IIS 6.
The rest of the protection trickery is in the RequestMap. If you did all the above, but it's still not triggering for you, you've got something wrong in the RequestMap. Make sure you have the requireSession="true"
attribute placed into the right <Host>
or <Path>
element for your choice of hostname and directory names.
If you still have no joy, the next step is to try collecting some logging detail. You need to raise the native logging level to DEBUG by editing etc\shibboleth\native.logger
and changing the default INFO level to DEBUG. Then you'll want to restart IIS. You should get more verbose information in the native.log
file. It will include a line each time you access the site that tells you what URL has been "mapped" by the filter. If it doesn't look right, you might get some hints on what to change.
Apache
Apache is much simpler when it comes to getting at least initial redirection to function, but it depends on how you choose to configure it. If you use .htaccess files, things are pretty automatic, you just have to do:
AuthType shibboleth
require valid-user
If you're relying on the RequestMap, then you'll run into issues based on server name configuration details. The Apache ServerName
command has to be set to match what you put in the RequestMap and you'll need to make sure UseCanonicalName On
is set. But additionally you'll need to get the module running for those requests by globally activating the module for those resources, perhaps using this kind of approach:
<Location />
AuthType shibboleth
require shibboleth
</Location>
This activates the module in a passive mode for all requests, while allowing specific content to force a session using the ShibbolethXml file.