2

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はリクエストを完全に処理します。

私は何が欠けていますか?

4

1 に答える 1

0

FormsAuthenticationは単純に煩わしいようで、401を見つけると、それを302login.aspxに変更します。私の解決策は、次のリンクのアイデアを使用することでした:http: //haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx

つまり、401-> 302の変更をFormsAuthenticationから401に戻します。検出コードで少し変更しました:

 if (response.StatusCode == 401 && request.RawUrl.ToLower().StartsWith("/api"))

レジスタを削除し、web.configのFormsAuthenticationモジュールの後に手動で追加しました

于 2012-10-15T20:47:58.197 に答える