Steam безопасно? Имеет свои репозитории

Вы пробовали DevDefined.OAuth?

Я использовал его, чтобы защитить свой WebApi с помощью 2-Legged OAuth. Я также успешно протестировал его с PHP-клиентами.

С помощью этой библиотеки довольно легко добавить поддержку OAuth. Вот как вы можете реализовать провайдер для ASP.NET MVC Web API:

1) Получить исходный код DevDefined.OAuth: https://github.com/bittercoder/DevDefined.OAuth - новейшая версия обеспечивает расширяемость OAuthContextBuilder.

2) Создайте библиотеку и сделайте ссылку на нее в своем проекте Web API.

3) Создайте пользовательский конструктор контекста для поддержки построения контекста из HttpRequestMessage:

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Net.Http;
using System.Web;

using DevDefined.OAuth.Framework;

public class WebApiOAuthContextBuilder : OAuthContextBuilder
{
    public WebApiOAuthContextBuilder()
        : base(UriAdjuster)
    {
    }

    public IOAuthContext FromHttpRequest(HttpRequestMessage request)
    {
        var context = new OAuthContext
            {
                RawUri = this.CleanUri(request.RequestUri), 
                Cookies = this.CollectCookies(request), 
                Headers = ExtractHeaders(request), 
                RequestMethod = request.Method.ToString(), 
                QueryParameters = request.GetQueryNameValuePairs()
                    .ToNameValueCollection(), 
            };

        if (request.Content != null)
        {
            var contentResult = request.Content.ReadAsByteArrayAsync();
            context.RawContent = contentResult.Result;

            try
            {
                // the following line can result in a NullReferenceException
                var contentType = 
                    request.Content.Headers.ContentType.MediaType;
                context.RawContentType = contentType;

                if (contentType.ToLower()
                    .Contains("application/x-www-form-urlencoded"))
                {
                    var stringContentResult = request.Content
                        .ReadAsStringAsync();
                    context.FormEncodedParameters = 
                        HttpUtility.ParseQueryString(stringContentResult.Result);
                }
            }
            catch (NullReferenceException)
            {
            }
        }

        this.ParseAuthorizationHeader(context.Headers, context);

        return context;
    }

    protected static NameValueCollection ExtractHeaders(
        HttpRequestMessage request)
    {
        var result = new NameValueCollection();

        foreach (var header in request.Headers)
        {
            var values = header.Value.ToArray();
            var value = string.Empty;

            if (values.Length > 0)
            {
                value = values[0];
            }

            result.Add(header.Key, value);
        }

        return result;
    }

    protected NameValueCollection CollectCookies(
        HttpRequestMessage request)
    {
        IEnumerable values;

        if (!request.Headers.TryGetValues("Set-Cookie", out values))
        {
            return new NameValueCollection();
        }

        var header = values.FirstOrDefault();

        return this.CollectCookiesFromHeaderString(header);
    }

    /// 
    /// Adjust the URI to match the RFC specification (no query string!!).
    /// 
    /// 
    /// The original URI. 
    /// 
    /// 
    /// The adjusted URI. 
    /// 
    private static Uri UriAdjuster(Uri uri)
    {
        return
            new Uri(
                string.Format(
                    "{0}://{1}{2}{3}", 
                    uri.Scheme, 
                    uri.Host, 
                    uri.IsDefaultPort ?
                        string.Empty :
                        string.Format(":{0}", uri.Port), 
                    uri.AbsolutePath));
    }
}

4) Используйте это руководство для создания поставщика OAuth: http://code.google .com / р / devdefined-инструменты / вики / OAuthProvider . На последнем шаге (Пример доступа к защищенным ресурсам) вы можете использовать этот код в своем атрибуте AuthorizationFilterAttribute:

public override void OnAuthorization(HttpActionContext actionContext)
{
    // the only change I made is use the custom context builder from step 3:
    OAuthContext context = 
        new WebApiOAuthContextBuilder().FromHttpRequest(actionContext.Request);

    try
    {
        provider.AccessProtectedResourceRequest(context);

        // do nothing here
    }
    catch (OAuthException authEx)
    {
        // the OAuthException's Report property is of the type "OAuthProblemReport", it's ToString()
        // implementation is overloaded to return a problem report string as per
        // the error reporting OAuth extension: http://wiki.oauth.net/ProblemReporting
        actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
            {
               RequestMessage = request, ReasonPhrase = authEx.Report.ToString()
            };
    }
}

Я реализовал свой собственный провайдер, поэтому я не тестировал приведенный выше код (за исключением, конечно, WebApiOAuthContextBuilder, который я использую в своем провайдере), но он должен работать нормально.

3
задан 07.05.2020, 05:03

1 ответ

Да

Добавленный Steam репозиторий официально поддерживается Valve, поэтому все должно быть безопасно. Многие люди используют Steam в Ubuntu ежедневно.

3
ответ дан 07.05.2020, 05:03

Теги

Похожие вопросы