4

次のような Web サービス エンドポイントを備えた DNN 7 Web サイトがあります。

public class DNNRoleManagementServiceController: DnnApiController
{
    //[AllowAnonymous]
    [RequireHost]
    [HttpGet]
    public HttpResponseMessage ManagePortalUserToRole(int PortalID, int UserID, int RoleID, bool RemoveFromRole )
    {
        //stuff
    }
}

これは開発用の AllowAnonymous でしたが、エンドポイントのセキュリティが優れているため、現在は RequireHost になっています。これらのエンドポイントは当社のシステムでのみ使用する必要があるため[RequireHost]、適切な認証レベルと思われます。

このエンドポイントを呼び出すための C# ライブラリがあります。

WebClient webClient = new WebClient();
Uri uri = new Uri(uriString.ToString());
webClient.Credentials = new NetworkCredential("host", "password");
webClient.DownloadStringCompleted += GetStringCompleted;
webClient.DownloadStringAsync(uri);

正しいパスワードを使用しても、400 または 401 の応答しか返されません。したがって、明らかに、資格情報を間違った方法で提供しています。ただ、正しい方法は何ですか?私が DNN WebAPI で見つけたすべてのドキュメントは、「[AllowAnonymous]属性を適用して、誰とその犬もあなたの Web サービスを使用できるようにします!」というものでした。あなたが提供しているサービスが公共の消費のためのものである場合、これは素晴らしいことです. これはそれらのケースの 1 つではありません。

では、呼び出しが機能するようにホスト資格情報を提供する正しい方法は何ですか? ここは本当によくわかりません。

4

1 に答える 1

0

やってみましたか

[DnnAuthorize(RequireHost=true)]

ユーザー名とパスワードの資格情報を渡す外部ソースからではなく、実際にログインしているユーザーに対してのみ行ったので、それが機能するかどうかはわかりません。

詳細については、このコードプレックス プロジェクトを参照してください。

コードプレックス: dnndashservice

于 2013-03-12T11:02:38.280 に答える