SS認証をUmbracoインストールと連携させることができません。Authenticate属性を使用してDTOまたはサービスにアクセスするたびに、umbracoログインにリダイレクトされます。再現するには:新しいプロジェクトを作成し、NugetからUmbracoをインストールし(4.7.1、4.8.1、4.9.0を試しましたが、同じ結果になりました)、NugetからSSをインストールしました。web.configの/apiパスで実行するようにSSを設定します。
<location path="api">
<system.web>
<httpHandlers>
<add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
</httpHandlers>
</system.web>
<!-- Required for IIS 7.0 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
</handlers>
</system.webServer>
</location>
Umbracoがこれを処理しないように、予約済みパスに/apiを追加しました。
<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/api" />
そして、AppHost.csで、EndpointHostConfigを変更し、認証を有効にしました。
SetConfig(new EndpointHostConfig
{
DebugMode = true, //Show StackTraces when developing
ServiceStackHandlerFactoryPath = "api"
});
//Enable Authentication
ConfigureAuth(container);
そして、Umbracoデータベースを使用するようにConfigureAuthの接続文字列を変更しました。
var connectionString = ConfigurationManager.AppSettings["umbracoDbDSN"];
最後に、HelloWorldServiceに属性を設定します。
[Authenticate]
public class HelloService : ServiceBase<Hello>
{
protected override object Run(Hello request)
{
return new HelloResponse { Result = "Hello, " + request.Name };
}
}
次に、RESTUriを介してHelloWorldServiceにアクセスします。
http://localhost:56835/api/hello
そしてすぐに私はリダイレクトされます:
http://localhost:56835/apilogin?redirect=http%3a%2f%2flocalhost%3a56835%2fapi%2fhello
デフォルトのUmbraco404ページが表示されます。これは、SSが突然Umbracoに認証を処理させることを意味します。Authenticate属性を削除すると、SSはリクエストを完全に処理します。
私は何が欠けていますか?