小编dna*_*non的帖子

twisted websocket chatserver openid authentication

我有一个python聊天服务器,使用twisted和autobahn websockets进行连接.

factory = MessageServerFactory("ws://localhost:9000", debug=debug, debugCodePaths=debug)
factory.protocol = MessageServerProtocol
factory.setProtocolOptions(allowHixie76=True)
listenWS(factory)
Run Code Online (Sandbox Code Playgroud)

这是服务器

import logging
from autobahn.websocket import WebSocketServerFactory, WebSocketServerProtocol
from DatabaseConnector import DbConnector
from LoginManager import LoginManager
from MessageTypes import MessageParser

class MessageServerProtocol(WebSocketServerProtocol):
def onOpen(self):
    self.factory.register(self)

def onMessage(self, msg, binary):
    if not binary:
        self.factory.processMessage(self, msg)

def connectionLost(self, reason):
    WebSocketServerProtocol.connectionLost(self, reason)
    self.factory.unregister(self)


class MessageServerFactory(WebSocketServerFactory):

logging.basicConfig(filename='log/dastan.log',format='%(levelname)s:%(message)s',level=logging.WARNING)

def __init__(self, url, debug=False, debugCodePaths=False):
    WebSocketServerFactory.__init__(self, url, debug=debug, debugCodePaths=debugCodePaths)
    self.clients = {}
    self.connector = DbConnector()
    self.messages = MessageParser()
    self.manager = LoginManager()

def register(self, client):
    print …
Run Code Online (Sandbox Code Playgroud)

javascript python websocket autobahn

10
推荐指数
1
解决办法
868
查看次数

具有基于角色的授权的ASP.NET Web Api

我使用Web API 2与基于OWIN令牌的身份验证.只有不起作用的是基于角色的授权.

在我的AuthorizationServerProvider.GrantResourceOwnerCredentials的实现中,这是我分配角色的方式:

identity.AddClaim(client.ApplicationType == ApplicationTypes.WebClient
            ? new Claim(ClaimTypes.Role, "user")
            : new Claim(ClaimTypes.Role, "admin"));
Run Code Online (Sandbox Code Playgroud)

但是在Controller中使用[Authenticate(Roles ="user")]只是向客户端返回授权拒绝消息.我检查了变量,这是什么内部 在此输入图像描述

所以角色似乎存在,但user.Claims为空,IsInRole("user")也返回负数.

我在stackoverflow和逻辑方面发现了几个问题,我没有看到我错过了什么.我想到的只是覆盖授权命令,但由于基于角色的授权似乎已经集成,所以这是不必要的......

编辑:这是我的workig方法的样子:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin") ?? "*";
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

    Client client;
    using (var repo = new AuthRepository())
    {
        client = repo.FindClient(context.ClientId);
        if (client.ApplicationType != ApplicationTypes.Service)
        {
            var user = await repo.FindUser(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect." + context.UserName);
                return;
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net owin

8
推荐指数
1
解决办法
8070
查看次数

c#使用套接字进行单元测试

我正在试图找出如何为服务器应用程序编写单元测试,该服务器应用程序需要C#中的套接字.我需要从套接字读取以获取请求.在Java中,我可以通过使用Streams来避免套接字,因此在编写单元测试时,我可以轻松地将字符串转换为流.

// ====== Input ======
InputStream socketInputStream = new InputStream(socket.getInputStream()); 
// or using string instead like this
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes());

BufferedReader in = new BufferedReader(new InputStreamReader(socketInputStream));

// ====== Output ======
OutputStream socketOutputStream = new OutputStream(socket.getOutputStream());
// I need to write byte[] to the stream
BufferedOutputStream out = new BufferedOutputStream(socketOutputStream);
Run Code Online (Sandbox Code Playgroud)

我只找到了NetworkStream(),但它也需要一个套接字.

我怎样才能在C#中实现这一点,所以我可以创建没有套接字的Streams?如何写入流并再次读取它以查看消息是否正确?

c# sockets unit-testing

7
推荐指数
1
解决办法
996
查看次数

GroupBy on list property→每个组中的对象

示例结构是:

class Project {
    public string Name { get; set; }
}

class TeamMember {
    public string Email { get; set; }
    public List<Project> Projects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

是否有(简单)方法使用GroupBy为每个项目获取一个组,并将所有成员作为列表?

使用foreach(var group in members.GroupBy(m => m.Projects.First().Name))它时,显然只能按每个成员的第一个项目进行分组.但我希望所有可能的项目都包含所有成员的列表.

我能想到的"最简单"的解决方案是:(我正在通过foreach循环运行项目组)

var projects = members.SelectMany(m => m.Projects).Select(p => p.Name).Distinct().ToList();
foreach (var proj in projects)
{
    var relevantMembers = members.Where(p => p.Projects.Select(pj => pj.Name).Contains(proj)).ToList();
    ...
}
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
1
解决办法
70
查看次数

标签 统计

c# ×3

asp.net ×1

autobahn ×1

javascript ×1

linq ×1

owin ×1

python ×1

sockets ×1

unit-testing ×1

websocket ×1